将javascript对象与内部数组相结合,使用相同的键(类似于foriegn键)

时间:2017-05-24 06:09:11

标签: javascript arrays node.js merge

           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应用程序

2 个答案:

答案 0 :(得分:2)

您可以使用Array#map()Array#filter()concat()

<强>阐释

arr1.map(a1=>{...}) =&gt;根据{{​​1}}

创建一个新数组

arr1 =&gt;保留arr2.filter(a2=>a2.prentId===a1.id)等于当前parentId

的所有项目

id =&gt;只保留.map(a2=>a2.time)数组

time是一个数组的数组:let times

[[1,2,3],[4,5,6]] =&gt;展平[].concat.apply([], times)嵌套数组

times

答案 1 :(得分:0)

&#13;
&#13;
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)
&#13;
&#13;
&#13;