Javascript 删除所有重复出现的JSON对象数组

Javascript 删除所有重复出现的JSON对象数组,javascript,arrays,typescript,object,Javascript,Arrays,Typescript,Object,我已经试过lodash的uniqBy了。但是它没有给我预期的结果,因为它没有删除所有重复出现的情况 您可以使用过滤并在vanilla javascript中查找: originaData.filter((o,index)=>originaData.find((\u o,\u index)=>o.id===\u o.id&&index!=\u index)) 以上内容将为您提供阵列中的重复数据 要获得没有重复数据的数组,只需使用: originaData.filter((o,index)=>!or

我已经试过lodash的uniqBy了。但是它没有给我预期的结果,因为它没有删除所有重复出现的情况

您可以使用过滤并在vanilla javascript中查找:

originaData.filter((o,index)=>originaData.find((\u o,\u index)=>o.id===\u o.id&&index!=\u index))

以上内容将为您提供阵列中的重复数据

要获得没有重复数据的数组,只需使用


originaData.filter((o,index)=>!originaData.find((\u o,\u index)=>o.id===\u o.id&&index!=\u index))

您可以使用过滤器和在普通javascript中查找:

originaData.filter((o,index)=>originaData.find((\u o,\u index)=>o.id===\u o.id&&index!=\u index))

以上内容将为您提供阵列中的重复数据

要获得没有重复数据的数组,只需使用


originaData.filter((o,index)=>!originaData.find((\u o,\u index)=>o.id===\u o.id&&index!=\u index))
您可以按
id
对分组数据进行分组,并按数组长度排序

var data=[{id:1,description:'abc'},{id:2,description:'def'},{id:1,description:'ghi'},{id:3,description:'jkl'},{id:2,description:'mno'},{id:4,description:'pqr'}],
[重复,唯一]=对象
.value(data.reduce((r,o)=>((r[o.id]=r[o.id]| |[]).push(o,r),{}))
.reduce((r,a)=>(r[+(a.length==1)]。push(…a),r),[[],[]);
console.log(唯一);
控制台日志(重复)

.as console wrapper{max height:100%!important;top:0;}
您可以按
id
进行分组,并按数组长度对分组数据进行排序

var data=[{id:1,description:'abc'},{id:2,description:'def'},{id:1,description:'ghi'},{id:3,description:'jkl'},{id:2,description:'mno'},{id:4,description:'pqr'}],
[重复,唯一]=对象
.value(data.reduce((r,o)=>((r[o.id]=r[o.id]| |[]).push(o,r),{}))
.reduce((r,a)=>(r[+(a.length==1)]。push(…a),r),[[],[]);
console.log(唯一);
控制台日志(重复)

.as console wrapper{max height:100%!important;top:0;}
您可以通过使用该方法在普通javascript中实现这一点。首先按id对数据进行分组,然后将组划分为唯一数组和重复数组。如果一个组只有一个项目,则该项目是唯一的;如果该组有多个项目,则包含的项目是重复的

originaData = [
{id: 1, description: abc },
{id: 2, description: def }
{id: 1, description: ghi }
{id: 3, description: jkl }
{id: 2, description: mno }
{id: 4, description: pqr }
]

expected result
uniqueData = [
{id: 3, description: jkl },
{id: 4, description: pqr }
]

duplicateData = [
{id: 1, description: abc },
{id: 2, description: def },
{id: 1, description: ghi },
{id: 2, description: mno }
]

这里的工作示例:

您可以通过使用该方法在普通javascript中实现这一点。首先按id对数据进行分组,然后将组划分为唯一数组和重复数组。如果一个组只有一个项目,则该项目是唯一的;如果该组有多个项目,则包含的项目是重复的

originaData = [
{id: 1, description: abc },
{id: 2, description: def }
{id: 1, description: ghi }
{id: 3, description: jkl }
{id: 2, description: mno }
{id: 4, description: pqr }
]

expected result
uniqueData = [
{id: 3, description: jkl },
{id: 4, description: pqr }
]

duplicateData = [
{id: 1, description: abc },
{id: 2, description: def },
{id: 1, description: ghi },
{id: 2, description: mno }
]

这里的工作示例:

您可以对数组中的ID进行计数。然后根据id计数对数据进行分区

函数计数(iterable,fn=obj=>obj){
const tally=新映射();
用于(iterable的常数项){
常数键=fn(项目);
如果(!tally.has(键))tally.set(键,0);
tally.set(键,tally.get(键)+1);
}
返回理货;
}
函数分区(iterable,fn=obj=>obj){
常量truthy=[],falsy=[];
用于(iterable的常数项){
(fn(项目)?truthy:falsy)。推(项目);
}
返回[真理,法尔西];
}
常量originaData=[{id:1,description:'abc'},{id:2,description:'def'},{id:1,description:'ghi'},{id:3,description:'jkl'},{id:2,description:'mno'},{id:4,description:'pqr'}];
const idCount=计数(原始数据,obj=>obj.id);
常量[唯一数据,重复数据]=
分区(originaData,obj=>idCount.get(obj.id)==1);
console.log(uniqueData);

console.log(重复数据)您可以对数组中的ID进行计数。然后根据id计数对数据进行分区

函数计数(iterable,fn=obj=>obj){
const tally=新映射();
用于(iterable的常数项){
常数键=fn(项目);
如果(!tally.has(键))tally.set(键,0);
tally.set(键,tally.get(键)+1);
}
返回理货;
}
函数分区(iterable,fn=obj=>obj){
常量truthy=[],falsy=[];
用于(iterable的常数项){
(fn(项目)?truthy:falsy)。推(项目);
}
返回[真理,法尔西];
}
常量originaData=[{id:1,description:'abc'},{id:2,description:'def'},{id:1,description:'ghi'},{id:3,description:'jkl'},{id:2,description:'mno'},{id:4,description:'pqr'}];
const idCount=计数(原始数据,obj=>obj.id);
常量[唯一数据,重复数据]=
分区(originaData,obj=>idCount.get(obj.id)==1);
console.log(uniqueData);
console.log(重复数据)