Javascript 从数组中删除相等的对象
我在JavaScript中有以下问题:我想检查数组是否存在重复项。我的示例数组在这里只有6个对象Javascript 从数组中删除相等的对象,javascript,arrays,Javascript,Arrays,我在JavaScript中有以下问题:我想检查数组是否存在重复项。我的示例数组在这里只有6个对象 var list = [ {id: "1", label: "Nils"}, {id: "2", label: "Max"}, {id: "3", label: "Thomas"}, {id: "4", label: "Tom"}, {id
var list = [
{id: "1", label: "Nils"},
{id: "2", label: "Max"},
{id: "3", label: "Thomas"},
{id: "4", label: "Tom"},
{id: "5", label: "Joschua"},
{id: "5", label: "Joschua"}];
在以后的项目中,它也可以超过500个,我通过CSV文件导入。
现在我想删除重复项。起初,我尝试了set方法:
var newList = [... new Set(list)];
console.log(newList);
结果是错误的。数组具有相同的对象
然后我尝试了一个简单的if查询:
if(list[4]==list[5]){
console.log("equal") }else{
console.log("unequal")}
结果是不平等的。我不明白为什么
阵列应如下所示:
[{ id: '1', label: 'Nils' },
{ id: '2', label: 'Max' },
{ id: '3', label: 'Thomas' },
{ id: '4', label: 'Tom' },
{ id: '5', label: 'Joschua' }]
如果id是唯一的,您可以使用
Array#filter
和基于id的Set
var列表=[
{id:“1”,标签:“Nils”},
{id:“2”,标签:“Max”},
{id:“3”,标签:“托马斯”},
{id:“4”,标签:“汤姆”},
{id:“5”,标签:“Joschua”},
{id:“5”,标签:“Joschua”}];
常量集=新集,
res=list.filter(x=>!set.has(x.id)和&set.add(x.id));
控制台日志(res)代码>如果id是唯一的,您可以使用数组#过滤器
和基于id的集合
var列表=[
{id:“1”,标签:“Nils”},
{id:“2”,标签:“Max”},
{id:“3”,标签:“托马斯”},
{id:“4”,标签:“汤姆”},
{id:“5”,标签:“Joschua”},
{id:“5”,标签:“Joschua”}];
常量集=新集,
res=list.filter(x=>!set.has(x.id)和&set.add(x.id));
控制台日志(res)代码>Set
无法完全比较对象,它仅适用于数字或字符串等基本类型
您可以使用基于键
/值
范例的映射
,例如:
const list=[
{id:'1',标签:'Nils'},
{id:'2',标签:'Max'},
{id:'3',标签:'Thomas'},
{id:'4',标签:'Tom'},
{id:'5',标签:'Joschua'},
{id:'5',标签:'Joschua'},
];
常量映射=新映射();
//将值推送到地图中
list.forEach(({
身份证件
标签
})=>map.set(id,label));
//将贴图转换为对象数组
const uniqueList=Array.from(map,([id,label])=>({
身份证件
标签
}));
控制台日志(唯一列表)代码>Set
无法完全比较对象,它仅适用于数字或字符串等基本类型
您可以使用基于键
/值
范例的映射
,例如:
const list=[
{id:'1',标签:'Nils'},
{id:'2',标签:'Max'},
{id:'3',标签:'Thomas'},
{id:'4',标签:'Tom'},
{id:'5',标签:'Joschua'},
{id:'5',标签:'Joschua'},
];
常量映射=新映射();
//将值推送到地图中
list.forEach(({
身份证件
标签
})=>map.set(id,label));
//将贴图转换为对象数组
const uniqueList=Array.from(map,([id,label])=>({
身份证件
标签
}));
控制台日志(唯一列表)代码>
然后我尝试了一个简单的if查询:
if(list[4]==list[5]){
console.log("equal") }else{
console.log("unequal")}
if(list[4]==list[5]){console.log(“equal”)}else{
console.log(“不等”)}结果不相等。我不明白为什么
=
使用抽象等式比较算法
- 首先,该算法检查类型是否相同
->他们就是这样
- 然后,算法继续执行第一步,并向下检查它们是否都引用了相同的对象
->它们不引用同一个对象
这就是为什么它打印为false的原因
{}的每次使用都会创建一个新对象,因此该检查失败,结果为false
让a={}
设b={}
console.log(a==b)代码>
然后我尝试了一个简单的if查询:
if(list[4]==list[5]){
console.log("equal") }else{
console.log("unequal")}
if(list[4]==list[5]){console.log(“equal”)}else{
console.log(“不等”)}结果不相等。我不明白为什么
=
使用抽象等式比较算法
- 首先,该算法检查类型是否相同
->他们就是这样
- 然后,算法继续执行第一步,并向下检查它们是否都引用了相同的对象
->它们不引用同一个对象
这就是为什么它打印为false的原因
{}的每次使用都会创建一个新对象,因此该检查失败,结果为false
让a={}
设b={}
console.log(a==b)问题的第一部分是检查两个对象是否相等。为了做到这一点,像lodash.com这样的东西可能真的很有帮助。你不应该与==进行比较,尤其是在比较对象时,这里有一篇关于比较对象的文章。问题的第一部分是检查两个对象是否相等。为了做到这一点,像lodash.com这样的东西可能真的很有帮助。你不应该与==比较,尤其是当你比较对象时,这里有一篇关于比较对象的文章谢谢你现在它工作了谢谢你现在它工作了