在javascript

时间:2017-09-21 05:52:05

标签: javascript arrays

以下是一个产品数组,它已在联系人数据上查找并处理,并创建可能的合并事件数组。 在下面的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"等等...

此过程将递归处理数据,直到我从数组中找到唯一值。所以它可能会水平合并数组。

希望读者可以有足够的想法。

1 个答案:

答案 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; }