Javascript 从js数组中删除公共对象并创建新的js数组
下面是JSON数组。在这里,我想找到公共项对象并将其添加到另一个列表中,然后将其从源列表中删除。 id为的项对于两个对象是公共的。此外,该列表是动态的Javascript 从js数组中删除公共对象并创建新的js数组,javascript,json,Javascript,Json,下面是JSON数组。在这里,我想找到公共项对象并将其添加到另一个列表中,然后将其从源列表中删除。 id为的项对于两个对象是公共的。此外,该列表是动态的 [ { "id": 1, "item": { "id": 1, "name": "itemA" } }, { "id": 2, "item": { "id": 1,
[
{
"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。你跑了吗?有什么问题吗?