3

这里有一个数组集:

totalarray =[
             [1,2,3,4],
             [8,9,10],     
             [15,16,17],
             [8,14,20]
            ]

如果哪一组具有相同的数字,我需要将其组合起来。

像那样:

totalarray =[
             [1,2,3,4],
             [8,9,10,14,20],
             [15,16,17]
            ]

其他示例:

totalarray =[
[1,2,3,4],
[6,10,19],
[6,16,4],
[4,14,20]
]

totalarray =[
[1,2,3,4,6,10,14,16,19,20]
]

因此,如果其他数组上的任何数字匹配,我需要将它组合在一起。例如:

Array = [[1,2,3,4],[8,9,10],[8,11,12]]; 

Array[1][0]并且Array[2][0]是匹配的,所以 Array 会变成Array = [1,2,3,4],[8,9,10,11,12].

有什么建议吗?

4

2 回答 2

1

你必须编写无聊的循环代码。但是你可以让它更易于管理

  • [].push.apply(arr1, arr2);:它将所有元素推arr2送到arr1而不构建新数组
  • indexOf:它在数组中查找元素。如果您想支持 IE8,如您标记问题,那么您可以使用$.inArray

这是代码:

var totalarray =[
  [1,2,3,4],
  [8,9,10],     
  [15,16,17],
  [8,14,20]
];
var result = [totalarray[0]];
function prec(tai) {
  for (var j=0; j<result.length; j++) {
    for (var k=0; k<tai.length; k++) {
      if (result[j].indexOf(tai[k])!=-1) {
        return result[j];
      }
    }
  }
  return null;
}
for (var i=1; i<totalarray.length; i++) {
  var arr = prec(totalarray[i]);
  if (arr) [].push.apply(arr, totalarray[i]);
  else result.push(totalarray[i]);
}

result是你想要的数组。

示范

于 2013-08-10T07:22:39.863 回答
0

如果我理解正确,您正试图获得工会

你使用库下划线你可以这样写

_.union([1, 2, 3], [101, 2, 1, 10], [2, 1]);
=> [1, 2, 3, 101, 10]

链接:Underscore.js

于 2013-08-10T07:15:29.507 回答