我构造了如下对象:
对象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比较嵌套对象的提示。
答案 0 :(得分:3)
您可以尝试使用Array.forEach和Array.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.reduce和Object.assign
value
答案 1 :(得分:1)
无突变的解决方案:
SELECT RIGHT( @SelectFields, LEN(@SelectFields) - CHARINDEX(',', @SelectFields))