将javascript对象与内部数组结合在一起(类似于foriegn键)
Obj1 = [ { 'id':1, 'name':'apple' }, { 'id':2, 'name':'mango' } ] Obj2 = [ { 'parentId' : 1, 'time': [1,2,3] }, { 'parentId' : 1, 'time': [4,5,6] }, { 'parentId' : 1, 'time': [7,8,9] }, { 'parentId' : 2, 'time': [11,12] } ] result = [ { 'id':1, 'name':'apple', 'time': [1,2,3,4,5,6,7,8,9] }, { 'id':2, 'name':'mango', 'time': [11,12] }, ]
如何将这两个对象与NodeJs或Javascript具有相同的关键字并获得以下结果对象。
而不使用Jquery或任何其他框架。
注意:NodeJs应用程序
你可以使用Array#map()
, Array#filter()
和concat()
解释
arr1.map(a1=>{...})
=>根据arr1
创build一个新的数组
arr2.filter(a2=>a2.prentId===a1.id)
=>保留parentId
所有项目等于当前的id
.map(a2=>a2.time)
=>只保留time
数组
let times
是一个数组数组: [[1,2,3],[4,5,6]]
[].concat.apply([], times)
=>展平times
嵌套数组
const arr1=[{id:1,name:"apple"},{id:2,name:"mango"}],arr2=[{parentId:1,time:[1,2,3]},{parentId:1,time:[4,5,6]},{parentId:1,time:[7,8,9]},{parentId:2,time:[11,12]}]; let result = arr1.map(a1=>{ let times = arr2.filter(a2=>a2.parentId===a1.id).map(a2=>a2.time); a1.time = [].concat.apply([], times); return a1; }); console.log(result);
const obj1=[{'id':1,'name':'apple'},{'id':2,'name':'mango'}]; const obj2=[{'parentId':1,'time':[1,2,3]},{'parentId':1,'time':[4,5,6]},{'parentId':1,'time':[7,8,9]},{'parentId':2,'time':[11,12]}]; const res = obj1.map(el => Object.assign(el, {time: obj2.filter(i => el.id === i.parentId).map(({time}) => time).join(',').split(',')})) console.log(res)