合并两个对象数组及其属性

时间:2017-02-12 02:39:16

标签: javascript arrays underscore.js

我有两个要合并的数组。

var arrayOne = [{id:1},{id:2}];
var arrayTwo = [{age: 20}, {age: 25}, {age: 22}];

合并数组应该是这样的

[{id:1, age: 20}, {id:2, age: 25}, {age: 22}]

我从下划线库中尝试过_.zip方法,但它只合并数组而不是对象数组。

由于

8 个答案:

答案 0 :(得分:3)

var merged = arrayTwo.map((o, i) => Object.assign({}, o, (arrayOne[i] || {})));

答案 1 :(得分:2)

更普遍的事情:

function merge(...arrays){
  var length = arrays.reduce((len, arr) => Math.max(len, arr.length), 0);
  var assign = i => (into, arr) => Object.assign(into, arr[i]);
  return Array.from({ length }, (v,i) => arrays.reduce(assign(i), {}));
}

var arrayOne = [{id:1},{id:2}];
var arrayTwo = [{age: 20}, {age: 25}, {age: 22}];

merge(arrayOne, arrayTwo /*or as many as you want*/ );

答案 2 :(得分:1)

ES6方法:

int n = fscanf(binfile, "%s %s %u %f", firstName, lastName, &id, &gpa);

请注意,长度可能不同,顺序无关紧要(您可以在之前或之后传递较大的数组,结果相同)。

答案 3 :(得分:1)

Enter the lenght of the array: 6
Enter value number 1: -4
Enter value number 2: 3
Enter value number 3: -9
Enter value number 4: 0
Enter value number 5: 4
Enter value number 6: 1
Array entered:  [-4 3 -9 0 4 1]
There are 3 positive number(s) of 6 in the array. Fraction: 0.500000
There are 2 negative number(s) of 6 in the array. Fraction: 0.333333
There are 1 zero(s) of 6 in the array. Fraction: 0.166667

或在ES6中:

function zipObjects() {
    return _.zip.apply(_, arguments).map(
        function(arr) {
            return _.extend.apply(_, [{}].concat(arr));
        }
    );
}

答案 4 :(得分:0)

具有对象传播道具的生成器的良好用例:

function* zip(...args) {
  const len = Math.max(...args.map(a => a.length));
  for (let i = 0; i < len; i++) {
      yield Object.assign({}, ...args.map(a => a[i]));
  }
}

这将产生一个迭代器,而不是一个数组,所以你可以得到一个简单Array.from或数组扩展的数组结果,如此

var arrayOne = [{id:1},{id:2}];
var arrayTwo = [{age: 20}, {age: 25}, {age: 22}];

console.log([...zip(arrayTwo, arrayOne)]);

编辑:如果你不喜欢屈服,你可以从一个新的阵列映射到最长的长度。适用于任何数组排序和任意数量的对象数组。

const zipAr = (...args) => Array
.from({ length: Math.max(...args.map(a => a.length)) })
.map((_, i) => Object.assign({}, ...args.map(a => a[i])));

答案 5 :(得分:0)

Object.assign()将是合并对象的关键方法。

示例:

var arrayOne = [{id:1},{id:2}];
var arrayTwo = [{age: 20}, {age: 25}, {age: 22}];


//Lets assume that we want to update arrayTwo ..

for(var i = 0 ; i < arrayOne.length; i++){
   arrayTwo[i] = Object.assign(arrayTwo[i] , arrayOne[i])
}


console.log(arrayTwo);

希望这会有所帮助..

答案 6 :(得分:0)

使用array.map()&amp; Object.assign()方法

<强>样本

&#13;
&#13;
var arrayOne = [{id:1},{id:2}];
var arrayTwo = [{age: 20}, {age: 25}, {age: 22}];

var res = arrayTwo.map(function(item, index) { return Object.assign(item, arrayOne[index]);
});

console.log(res);
&#13;
&#13;
&#13;

答案 7 :(得分:-1)

function compareMyArrays(arrayOne, arrayTwo){
  var newArray = [];
  var maxCounter = (arrayOne.lenght > arrayTwo.length) ? arrayOne.length : arrayTwo.length;
  for(var i = 0; i < arrayOne.length; i++) {
    var value1 = null;
    if(arrayOne.length-1 <= i){
      value1 = arrayOne[i];
    }
    var value2 = null;
      if(arrayOne.length-1 <= i){
      value1 = arrayOne[i];
    }
    if(!!value1 && !! value2){
      newArray[i] = {value1, value2}
    } else if(!!value1) {
      newArray[i] = {value1}
    } else if(!!value2) {
      newArray[i] = {value2}
    }
  }
  return newArray;
}

确切地返回您要查找的内容,但仅在两个数组具有相同长度时才起作用

编辑:现在也可以使用不同长度的数组