Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 比较两个对象数组并获得差异_Javascript_Arrays - Fatal编程技术网

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);