比较JavaScript中的两个对象

时间:2018-09-12 11:36:59

标签: javascript node.js lodash

我构造了如下对象:

对象1

[ { 
   ext: '1287',
   ip: '(Unspecified)',
   queue: [ ]
 } ]

对象2

 [ { Queue: '222',
    Members:
     [ {"ext":"1287"},
       {"ext":"4118"} ],
    Callers: [] },

  { Queue: '111',
    Members:
     [ {"ext":"4131"},
       {"ext":"1287"},
       {"ext":"4138"}
     ],
    Callers: [] }]

我想比较对象1和对象2。如果对象2的嵌套成员对象中存在对象1的ext键的值,则 Queue的值应推送到队列数组,最终对象应如下所示。

我想要的最终对象

   [{ ext: '1287',
   ip: '(Unspecified)',
   queue: [222, 111 ] }]

我需要一些关于如何使用lodash比较嵌套对象的提示。

2 个答案:

答案 0 :(得分:3)

您可以尝试使用Array.forEachArray.some

let obj1 = [{ext: '1287',ip: '(Unspecified)',queue: []}];
let obj2 = [{Queue: '222',Members: [{"ext":"1287"},{"ext":"4118"}],Callers: []},{Queue: '111',Members: [{"ext":"4131"},{"ext":"1287"},{"ext":"4138"}],Callers: []}];

obj1.forEach(o => {
  obj2.forEach(v => {
    let exists = v.Members.some(m => m.ext === o.ext);
    if (exists) o.queue.push(v.Queue);
  });
});

console.log(obj1);

改进

您可以通过首先创建map的{​​{1}}并将obj1设为ext,将key设为object来提高性能。使用Array.reduceObject.assign

value

答案 1 :(得分:1)

无突变的解决方案:

SELECT RIGHT( @SelectFields, LEN(@SelectFields) - CHARINDEX(',', @SelectFields))