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数组对象复制合并的主要内容,如果未能解决你的问题,请参考以下文章
javascript 数组对象根据相同属性值{key:value}合并两个对象