在数组中使用jQuery查找匹配项并替换

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]
]

to

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]。

有什么建议吗?


2
我不确定我理解你的问题。你是指哪一个有重复的数字?你能再解释一下吗? - Sergio
抱歉,我需要在另一个数组中匹配任何数字并将它们合并。例如: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]。感谢快速回复。 - ronicken
你想要加入只有共同值的数组吗?你确定没有更好的方法来处理吗?比如合并所有数组并去重? - omma2289
1
你的第二个例子似乎是错误的:数组0+3和数组1+2之间没有共同的值。 - Denys Séguret
如何让Array[1][0]和Array[2][0]匹配?! - itsazzad
抱歉,现在已经更新。感谢您的快速回复。 - ronicken
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 是您想要的数组。

演示


0

如果我理解正确,你正在尝试获取联合

你可以使用库underscore编写如下代码

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

链接: Underscore.js


那真的不像 OP 所要求的。 - Denys Séguret

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接