以下是一个产品数组,它已在联系人数据上查找并处理,并创建可能的合并事件数组。 在下面的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"等等...
此过程将递归处理数据,直到我从数组中找到唯一值。所以它可能会水平合并数组。
希望读者可以有足够的想法。
答案 0 :(得分:1)
基本上,您可以搜索结果集中的exisitent项,并使用相同的项加入数组。
项目的顺序与外观相同。
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; }