下面是一个产品数组,它已在联系人数据上查找和处理,并创建可能出现的合并事件数组。在下面的arrProduct中,我希望过滤重复数组并与现有数组合并,最后创建一个名为arrFinalProduct的唯一数组产品。
阵列积
arrProduct =
[
[ 0 ],
[ 1, 2 ],
[ 2 ],
[ 3 ],
[ 4, 5, 6, 10 ],
[ 5, 6, 7, 11 ],
[ 6 ],
[ 7, 11 ],
[ 8 ],
[ 9 ],
[ 10 ],
[ 11 ],
[ 12 ],
[ 13, 14 ],
[ 14 ]
]
最终产品
arrFinalProduct =
[
[ 0 ],
[ 1, 2 ],
[ 3 ],
[ 4, 5, 6, 7, 10, 11 ],
[ 8 ],
[ 9 ],
[ 12 ],
[ 13, 14 ]
]
arrProduct是产品数组,arrFinalProduct是最终产品数组。基本的逻辑是,如果从数组中找到匹配的情况,则需要合并数组。
假设在arrProduct中的任何索引中都没有0,所以它不合并和推入arrFinalProduct,arrProduct值2在第1和第2索引上被发现,因此它可以与1索引合并,成为1,2并删除2的第3索引。arrProduct索引5有两个共同的值5和6,在索引6中也是如此,因此它可以合并为1,成为"4,5,6,7“等等。
这个过程将递归地处理数据,直到我从数组中找到唯一的值。因此,它可能会水平地合并数组。
希望读者能有一个足够的想法。
发布于 2017-09-21 07:35:32
基本上,您可以在结果集中搜索现有项,并使用相同的项连接数组。
项目的顺序与外观相同。
var array = [[0], [1, 2], [2], [3], [4, 5, 6, 10], [5, 6, 7, 11], [6], [7, 11], [8], [9], [10], [11], [12], [13, 14], [14]],
result = array.reduce(function (r, a) {
r.some(function (b, i, bb) {
if (a.some(c => b.includes(c))) {
bb[i] = [...new Set(b.concat(a))];
return true;
}
}) || r.push(a);
return r;
}, []);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
https://stackoverflow.com/questions/46336358
复制相似问题