【问题标题】:Merging 2 arrays into one array Javascript将2个数组合并为一个数组Javascript
【发布时间】:2020-06-22 17:36:45
【问题描述】:

我创建了 2 个数组,我想将对象数组合并为一个填充所有列的数组 例如:

var array = [{"first_name":"John", "Last Name":"Doe", "age":46}, {"first_name":"Tim", "Last Name":"Jones", "age":26}, {"first_name":"Marcus", "Last Name":"Brown", "age":31}, {"first_name":"Paul", "Last Name":"Daniels", "age":28}, {"first_name":"Samantha", "Last Name":"Williams", "age":32 }];

var array2 = [{"first_namee":"John", "Last Name":"Doe", "age":46, "height": "65"}, {"first_name":"Tim", "Last Name":"Jones", "age":26, "height": "58"}, {"first_name":"Marcus", "Last Name":"Brown", "age":66, "height": "69"}, {"first_name":"Paul", "Last Name":"Daniels", "age":28, "height": "72"}];

我想将 2 个对象数组合并为一个,如下所示:

var arrayMerge = [{"first_name":"John", "Last Name":"Doe", "age":46, "height": "65"}, {"first_name":"Tim", "Last Name":"Jones", "age":26, "height": "58"}, {"first_name":"Marcus", "Last Name":"Brown", "age":66, "height": "69"}, {"first_name":"Paul", "Last Name":"Daniels", "age":28, "height": "72"}, {"first_name":"Samantha", "Last Name":"Williams", "age":32, "height": ""}];

我将如何对 2 个数组执行此操作,我尝试了 concat 和 merge,它将两个数组合二为一,而不是将所有列合二为一

【问题讨论】:

  • “列”是指对象键吗?
  • 是的,我就是这个意思
  • 这不是一个非常简单的操作。你必须先决定几件事。 1.你如何识别一个对象是唯一的?第一个名字?最后的?两个都?两者和年龄?等等... 2. 哪个数组是真实的? array 的值比array2 少,如果array2 的年龄不同怎么办?应该保留哪一个?
  • 所以目标是将所有对象键合并到一个数组中。因为唯一不同的是高度,如果在数组 2 上没有高度的一个新人,我想将它们合并在一起

标签: javascript arrays object variables


【解决方案1】:

一个不太灵活的选择是使用 ES6 扩展运算符,然后,您可以填写差异:

let array = [{"first_name":"John", "Last Name":"Doe", "age":46}, {"first_name":"Tim", "Last Name":"Jones", "age":26}, {"first_name":"Marcus", "Last Name":"Brown", "age":31}, {"first_name":"Paul", "Last Name":"Daniels", "age":28}, {"first_name":"Samantha", "Last Name":"Williams", "age":32 }];

let array2 = [{"first_namee":"John", "Last Name":"Doe", "age":46, "height": "65"}, {"first_name":"Tim", "Last Name":"Jones", "age":26, "height": "58"}, {"first_name":"Marcus", "Last Name":"Brown", "age":66, "height": "69"}, {"first_name":"Paul", "Last Name":"Daniels", "age":28, "height": "72"}];

let mergedArray = [...array, ...array2]
mergedArray.map(item => {
  if (!item.height) {
    item.height = ""
  }
})

console.log(mergedArray)

【讨论】:

    【解决方案2】:

    首先,假设对象在数组中的顺序相同,您可以映射第一个对象,并使用Object.assign() 将两个对象合并在一起,为数组元素生成一个新对象。

    像这样:

    const mergeArraysOfObjects = (arr1, arr2) =>
      arr1.map((obj1, idx) => Object.assign({}, obj1, arr2[idx]))
    

    您还可以使用新的对象扩展运算符:

    const mergeArraysOfObjects = (arr1, arr2) =>
      arr1.map((obj1, idx) => ({ ...obj1, ...arr2[idx] }))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-10
      • 2013-06-19
      • 2014-08-04
      • 2021-01-15
      • 2021-07-16
      • 1970-01-01
      • 1970-01-01
      • 2021-01-24
      相关资源
      最近更新 更多