结合二维数组的JavaScript

时间:2014-05-26 15:24:30

标签: javascript jquery arrays

我们说我有两个数组:

var a = [[1, 10], [2, 10], [3, 10], [4, 10], [5, 10]];
var b = [[1, 20], [3, 20], [4, 20]];

我想将这两者合并为一个新数组:

var c = [[1, 10, 20], [2, 10], [3, 10, 20], [4, 10, 20], [5, 10]];

最好的方法是做什么。我会在一秒钟内用我尝试过的方式更新我的问题。

var c = [];
for(var i = 0; i < a.length; i++) {
  for(var j = 0; j < b.length; j++) {
    if(a[i][0] == b[j][0]) {
      // Push b value into a
      a[i][0].push(b[j][1]);
    } else {
      // Don't do anything...
    }
  }
}

c = a;  // Useless code here but just wanted to return c
return c;

2 个答案:

答案 0 :(得分:2)

<强> Example

var a = [[1, 10], [2, 10], [3, 10], [4, 10], [5, 10]];
var b = [[1, 20], [3, 20], [4, 20]];
var c = [];

// Loop over a
for (var n = 0; n < a.length; n++) {
    // Create copy of a's value
    var subA = a[n].slice(0);
    // Loop over b
    for (var i = 0; i < b.length; i++) {
        var subB = b[i];
        // Check if a contains b
        if (subA.indexOf(subB[0]) === 0) {
            // Add b to new a value
            subA.push(subB[1]);
        }
    }
    // Add new value to c
    c.push(subA);
}

console.log(a)
console.log(c);

编辑1:更新循环

编辑2:如果第一项等于第一项

编辑3:切片a以保留原始值

答案 1 :(得分:1)

为什么不使用普通数组?他们可能很稀疏。

var a = [10, 10, 10, 10, 10];
var b = [20,   , 20, 20];

现在让他们进入一个阵列:

var c = new Array(Math.max(a.length, b.length));
for (var i=0; i<c.length; i++)
    if (i in a && i in b)
        c[i] = [a[i], b[i]];
    else if (i in a)
        c[i] = [a[i]];
    else if (i in b)
        c[i] = [b[i]];

对于您的对象(项目实际上不必是数组)由非整数索引值组成的情况,您可以对两个排序使用简单的标准merge algorithm 列表。它将在O(n+m)中运行,而不是O(n*m)作为您的解决方案。有关示例实现和更多指示,请参阅this answer