Javascript:使用单个属性删除对象数组中的重复项

Javascript:使用单个属性删除对象数组中的重复项,javascript,object,duplicates,Javascript,Object,Duplicates,我有这样的对象,其中“id”是唯一的。在任何低于ES5的版本中,我都需要从javascript中的对象数组中删除重复项。我需要根据id字段进行比较,并删除重复项 例如: Object = [ {id: id_one, value: value_one, label: ABC}, {id: id_one, value: value_one, label: ABC}, {id: id_three, value: value_three, label: ABX}, {id: id_two, value

我有这样的对象,其中“id”是唯一的。在任何低于ES5的版本中,我都需要从javascript中的对象数组中删除重复项。我需要根据id字段进行比较,并删除重复项

例如:

Object = [
{id: id_one, value: value_one, label: ABC},
{id: id_one, value: value_one, label: ABC},
{id: id_three, value: value_three, label: ABX},
{id: id_two, value: value_two, label: ABY},
{id: id_four, value: value_four, label: ABD}
];
输出:

result = [
{id: id_one, value: value_one, label: ABC},
{id: id_three, value: value_three, label: ABX},
{id: id_two, value: value_two, label: ABY},
{id: id_four, value: value_four, label: ABD}
];
我试过这样的逻辑

function getDistValues(object) {
  var distObject = [];
  var tempIndex = [];
  var length = object.length;

  for (var i = 0; i < length; i++) {
    tempIndex.push(object[i].id);

    if (tempIndex.indexOf(object[i].id) === -1 || i === 0) {
      distObject.push(object[i]);
    }
  }

  return distObject;
}
函数getDistValues(对象){ var distObject=[]; var指数=[]; 变量长度=object.length; 对于(变量i=0;i 它只是给出第一个对象。我试图映射ID并进行比较,但没有成功


任何帮助都会对我有用。

这是因为您总是将id添加到
tempIndex
数组中,所以它总是认为当前id是重复的。尝试:

function getDistValues(object) {
  var distObject = [];
  var tempIndex = [];
  var length = object.length;

  for (var i = 0; i < length; i++) {    
    if (tempIndex.indexOf(object[i].id) === -1 || i === 0) {
      tempIndex.push(object[i].id);
      distObject.push(object[i]);
    }
  }

  return distObject;
}
函数getDistValues(对象){ var distObject=[]; var指数=[]; 变量长度=object.length; 对于(var i=0;i这是因为您总是将id添加到
tempIndex
数组中,因此它总是认为当前id是重复的。尝试:

function getDistValues(object) {
  var distObject = [];
  var tempIndex = [];
  var length = object.length;

  for (var i = 0; i < length; i++) {    
    if (tempIndex.indexOf(object[i].id) === -1 || i === 0) {
      tempIndex.push(object[i].id);
      distObject.push(object[i]);
    }
  }

  return distObject;
}
函数getDistValues(对象){ var distObject=[]; var指数=[]; 变量长度=object.length; 对于(var i=0;i这是一个使用reduce和object的解决方案

const input = [
{id: 'id_one', value: 'value_one', label: 'ABC'},
{id: 'id_one', value: 'value_one', label: 'ABC'},
{id: 'id_three', value: 'value_three', label: 'ABX'},
{id: 'id_two', value: 'value_two', label: 'ABY'},
{id: 'id_four', value: 'value_four', label: 'ABD'}
]

const output = Object.values(
  input.reduce((memo, curr) => {
    memo[curr.id] = curr
    return memo
  }, {})
)

console.log(output)

这是一个使用reduce和object的解决方案

const input = [
{id: 'id_one', value: 'value_one', label: 'ABC'},
{id: 'id_one', value: 'value_one', label: 'ABC'},
{id: 'id_three', value: 'value_three', label: 'ABX'},
{id: 'id_two', value: 'value_two', label: 'ABY'},
{id: 'id_four', value: 'value_four', label: 'ABD'}
]

const output = Object.values(
  input.reduce((memo, curr) => {
    memo[curr.id] = curr
    return memo
  }, {})
)

console.log(output)

在检查项目是否存在之前,您正在将项目添加到
tempIndex
数组中。由于您总是添加每一项,因此当您进行检查时,项目将已经存在

您必须对此进行反向操作-检查项目是否存在,然后将其添加到
tempIndex

var数据=[
{id:“id_one”,value:“value_one”,label:“ABC”},
{id:“id_one”,value:“value_one”,label:“ABC”},
{id:“id_三”,value:“value_三”,label:“ABX”},
{id:“id_-two”,value:“value_-two”,label:“ABY”},
{id:“id_-four”,value:“value_-four”,标签:“ABD”}
];
函数getDistValues(对象){
var distObject=[];
var指数=[];
变量长度=object.length;
对于(变量i=0;i控制台日志(结果)在检查项目是否存在之前,您正在将项目添加到
tempIndex
数组中。由于您总是添加每一项,因此当您进行检查时,项目将已经存在

您必须对此进行反向操作-检查项目是否存在,然后将其添加到
tempIndex

var数据=[
{id:“id_one”,value:“value_one”,label:“ABC”},
{id:“id_one”,value:“value_one”,label:“ABC”},
{id:“id_三”,value:“value_三”,label:“ABX”},
{id:“id_-two”,value:“value_-two”,label:“ABY”},
{id:“id_-four”,value:“value_-four”,标签:“ABD”}
];
函数getDistValues(对象){
var distObject=[];
var指数=[];
变量长度=object.length;
对于(变量i=0;i
如果
id
不在集合中,则可以获取for
id
属性并进行筛选

var数组=[{id:'id\u-one',value:'value\u-one',label:'ABC'},{id:'id\u-one',value:'value\u-one',label:'ABX'},{id:'id\u-one',label:'value\u-two',label:'ABY'},{id:'id\u-four',value:'value:'value\u-four',label:'ABD'],
unique=array.filter((ids=>({id})=>!ids.has(id)和&ids.add(id))(新集合));
console.log(唯一)
.as console wrapper{max height:100%!important;top:0;}
如果
id
不在集合中,则可以获取for
id
属性并进行筛选

var数组=[{id:'id\u-one',value:'value\u-one',label:'ABC'},{id:'id\u-one',value:'value\u-one',label:'ABX'},{id:'id\u-one',label:'value\u-two',label:'ABY'},{id:'id\u-four',value:'value:'value\u-four',label:'ABD'],
unique=array.filter((ids=>({id})=>!ids.has(id)和&ids.add(id))(新集合));
console.log(唯一)

.as console wrapper{max height:100%!important;top:0;}
您可以通过将
id
存储到
对象中,并检查
对象中是否已经存在
id
。如果存在,则表示您以前已获取该对象。如果没有,则将对象推入新数组

当我们从具有恒定时间的对象进行检查时,这种方法需要
O(n)
时间

var-arr=[
{id:'id_one',value:'value_one',label:'ABC'},
{id:'id_one',value:'value_one',label:'ABC'},
{id:'id_三',value:'value_三',label:'ABX'},
{id:'id_two',value:'value_two',label:'ABY'},
{id:'id_-four',value:'value_-four',标签:'ABD'}
];
函数getDistValues(arr){
var hash={};
var uniqueArr=[];
对于(变量i=0,l=arr.length;i