Javascript数组对象复制合并

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Javascript数组对象复制合并相关的知识,希望对你有一定的参考价值。

There are now two arrays

第一个数组:

var arr = [
   {path: '/a', name: 'aa'},
   {path: '/f', name: 'ff'}
];

两个阵列:

var arr1 = [
   {path: '/a', meta: {title:'aa2', hidden: 1}},
   {path: '/b', meta: {title:'bb', hidden: 1}},
   {path: '/c', meta: {title:'cc', hidden: 0}},
   {path: '', meta: {title:'dd', hidden: 0}}
   {path: '', meta: {title:'ee', hidden: 0}}
 ]

我想将它们合并到这个:

var arr2 = [
  {path: '/a', name: 'aa', meta: {title:'aa2', hidden: 1}},
  {path: '/b', meta: {title:'bb', hidden: 1}},
  {path: '/c', meta: {title:'cc', hidden: 0}},
  {path: '', meta: {title:'dd', hidden: 0}},
  {path: '', meta: {title:'ee', hidden: 0}},
  {path: '/f', name: 'ff'}
]
console.log(arr2)

我该怎么做才能得到一个arr2数组?

答案

您可以将数组合并为一个,而不是使用reduce

这里的想法是 -

  • 首先将两个数组合并为一个数组
  • 现在循环合并数组并使用path作为键
  • 如果对象上已存在键,则将先前值与当前值合并
  • 否则分配一个新值
  • 最后从对象中取出值以获得所需的输出

var arr = [{path: '', meta: {title: 'index'}},{path: '/a', name: 'aa'}];

var arr1 = [{path: '/a', meta: {title:'aa2', hidden: 1}}, {path: '/b', meta: {title:'bb', hidden: 1}} ]  
   
let op = [...arr,...arr1].reduce((op,inp) => {
  let path = inp.path
  op[path] = op[path] || {}
  op[path] = {...op[path], ...inp}
  return op
},{})

console.log(Object.values(op))

以上是关于Javascript数组对象复制合并的主要内容,如果未能解决你的问题,请参考以下文章

JS----对象的合并与克隆与数组的深浅克隆

javascript 数组对象根据相同属性值{key:value}合并两个对象

JavaScript笔试题(js高级代码片段)

JavaScript单行代码,也就是代码片段

我将如何减少这个数组,以便每个对象中的对象被合并 javascript 但不知道键值名称

如何合并嵌套对象Javascript? [复制]