Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.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,我在JavaScript中有以下问题:我想检查数组是否存在重复项。我的示例数组在这里只有6个对象 var list = [ {id: "1", label: "Nils"}, {id: "2", label: "Max"}, {id: "3", label: "Thomas"}, {id: "4", label: "Tom"}, {id

我在JavaScript中有以下问题:我想检查数组是否存在重复项。我的示例数组在这里只有6个对象

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)