如何使用javascript将对象数组合到一个到另一个数组

时间:2015-03-28 05:20:46

标签: javascript arrays

我已经为给定的代码数据写过,但是无法将一个对象数组合成另一个对象数组,如下所示。

    var data=[{x:10,y:30},{a:50,b:40}]
    var data1=[{x1:10,y1:30},{a1:50,b1:40}]

    function fctnCombind(){
    for(var i in data){
    for(var j in data1){
    data[i].children=data1[j]
    //console.log(data[i].children)
    data[i].push(data[i].children)
    }
    return data;
    }

    }
And final output is given below:
        [{x:10,y:30,c:[x1:10,y1:30]},{a:50,b:40,d:[a1:50,b1:40]}]

2 个答案:

答案 0 :(得分:0)

根据您的代码,

当您迭代数组时。您将array2第一项存储在作为对象的.children array1[i]属性中。

现在,当您使用data[i].push(data[i].children)时,data[i]实际上是一个对象,它没有push属性。所以它失败了。

假设维持订单。

var data = [{
    x: 10,
    y: 30
}, {
    a: 50,
    b: 40
}]
var data1 = [{
    x1: 10,
    y1: 30
}, {
    a1: 50,
    b1: 40
}];


function combineObjects(data, data1) {
    for(var i=0; i < data.length; i++) {
        Object.keys(data1[i]).forEach(function(item) {
           data[i][item] = data1[i][item] 
        });
    }
    return data;
}

   combineObjects(data, data1);

答案 1 :(得分:0)

你真的只需迭代其中一个数组,然后执行How can I merge properties of two JavaScript objects dynamically?中描述的内容:

&#13;
&#13;
    var data = [{x:10,y:30},{a:50,b:40}];
    var data1 = [{x1:10,y1:30},{a1:50,b1:40}];

    // copy
    var result = data.map(function(value, i) {
        return Object.assign({}, value, data1[i]);
    });
    console.log(result);

    // in place
    data.forEach(function(value, i) {
      for (var prop in data1[i]) {
          value[prop] = data1[i][prop];
      }
    });
    // `data` is now the merged result
    console.log(data);
    
&#13;
&#13;
&#13;

这假设两个数组的长度相同。

Polyfill for Object.assign