Javascript 比较两个对象数组并获得差异
嘲弄 代码 预期产量Javascript 比较两个对象数组并获得差异,javascript,arrays,Javascript,Arrays,嘲弄 代码 预期产量 a.filter((element)=> { return b.some((ele) =>{ if (element.id === ele.id) { return matched[element.id] = element.id } else { return unmatched[element.id] = element.id } }); }); 输出 matched = {123: 123, 1234:
a.filter((element)=> {
return b.some((ele) =>{
if (element.id === ele.id) {
return matched[element.id] = element.id
} else {
return unmatched[element.id] = element.id
}
});
});
输出
matched = {123: 123, 1234: 1234}
unmatched = {12345: 12345}
有人能帮我吗。我试图比较两个数组并将差异放入不同的对象中您可以将
集合
或对象放入a
并迭代b
以将权限放入正确的对象中
const
a=[{id:123},{id:1234},{id:12345}],
b=[{id:123},{id:1234},{id:123456}],
aSet=新集合(a.map(({id})=>id)),
[matched,unmatched]=b.reduce((r,{id})=>{
赋值(r[1-aSet.has(id)],{[id]:id});
返回r;
}, [{}, {}]);
控制台日志(匹配);
console.log(不匹配)代码>
.as控制台包装{max height:100%!important;top:0;}
这将起作用:
unmatched = {123: 123, 1234: 1234, 12345: 12345}
matched = {123: 123, 1234: 1234}
将赋值返回到.some()
是一种奇怪的模式,我希望.some
总是true
,除非ID是0
或另一个假值。为什么输出中的键和值相同?对的答案将获得实际的不匹配对象。我可以知道这里的'aSet'是什么吗这是一个具有a
中ID的实例。我可以找到数组“a”中的匹配记录。你能帮我解决这个问题吗?你的索引是什么?它应该应用在哪里?我有原始数据记录,它将由匹配的对象和其他对象集组成,我需要根据索引位置更新匹配和不匹配的对象记录。因此,我需要根据原始对象数组查找匹配记录的索引。对于“不匹配”,我不需要索引。让我们考虑“A”作为原始记录,“B”是我正在接收的更新。
unmatched = {123: 123, 1234: 1234, 12345: 12345}
matched = {123: 123, 1234: 1234}
a = [{id:123},{id:1234},{id:12345}];
b = [{id:123},{id:1234},{id:123456}];
function compare(a, b) {
const returnObj = { matched: [], unmatched: [] };
a.forEach(aItem => {
const found = b.find(bItem => JSON.stringify(aItem) === JSON.stringify(bItem));
returnObj[found ? 'matched' : 'unmatched'].push(aItem);
});
return returnObj;
}
const { matched, unmatched } = compare(a, b);
console.log(matched);
console.log(unmatched);