Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/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 从js数组中删除公共对象并创建新的js数组_Javascript_Json - Fatal编程技术网

Javascript 从js数组中删除公共对象并创建新的js数组

Javascript 从js数组中删除公共对象并创建新的js数组,javascript,json,Javascript,Json,下面是JSON数组。在这里,我想找到公共项对象并将其添加到另一个列表中,然后将其从源列表中删除。 id为的项对于两个对象是公共的。此外,该列表是动态的 [ { "id": 1, "item": { "id": 1, "name": "itemA" } }, { "id": 2, "item": { "id": 1,

下面是JSON数组。在这里,我想找到公共项对象并将其添加到另一个列表中,然后将其从源列表中删除。 id为的项对于两个对象是公共的。此外,该列表是动态的

 [
      {
        "id": 1,
        "item": {
          "id": 1,
          "name": "itemA"
        }
      },
      {
        "id": 2,
        "item": {
          "id": 1,
          "name": "itemA"
        }
      },
      {
        "id": 3,
        "item": {
          "id": 2,
          "name": "itemB"
        }
      }
    ]
  • 通过数组,传递累加器
  • 累加器跟踪找到的元素
  • 检查累加器,如果迭代元素以前是由
    id
    找到的,如果是,则将其推入重复项
  • 否则将其推入
    arr
const arr=[
{
“id”:1,
“项目”:{
“id”:1,
“名称”:“项目A”
}
},
{
“id”:2,
“项目”:{
“id”:1,
“名称”:“项目A”
}
},
{
“id”:3,
“项目”:{
“id”:2,
“名称”:“项目B”
}
}
]
const result=arr.reduce((acc,el,i)=>{
如果(找到附件[el.item.id]){
附件重复推送(el)
}否则{
附件源推力(el)
}
acc.found[el.item.id]=真
如果(i==arr.length-1)
删除找到的附件
返回acc
}, {
资料来源:[],
副本:[],
找到:{}
})
console.log(result.source)//已删除重复项的源

console.log(result.duplicates)//重复数组
您可以使用
reduce
Map
组合来键入数据:

const data=[{“id”:1,“item”:{“id”:1,“name”:“itemA”},{“id”:2,“item”:{“id”:1,“name”:“itemA”},{“id”:3,“item”:{“id”:2,“name”:“itemB”}];
const[map,dupes]=数据。reduce(([map,dupes],obj)=>
map.has(obj.item.id)?[map,dupes.concat(obj)]:[map.set(obj.item.id,obj),dupes]
,[新地图,[]);
const uniques=[…map.values()];
控制台日志(uniques);
console.log('dupes:');

控制台日志(重复)请尝试编写自己的代码。如果您遇到问题,我们将查看您的代码并提供帮助。请阅读
json
标记的使用说明。这不是关于JSON的真正问题。我想要重复列表,它是js吗?重复列表在代码中称为
dupes
。是的,这是JS。您可以按“RunCodeSnippet”查看它的运行。如果你想澄清,请告诉我你想澄清的部分。上面的代码有两个副本。但是结果有1个重复,这是纯js吗?这是纯js。你跑了吗?有什么问题吗?