繁体   English   中英

删除数组中的重复元素

[英]Remove repeating elements in an array

 for(var i=0;i<d.length;i++) { current=d[i].businessunits; arraynew.push(current);//array new like this {0:EU;1:PU;2:MS;3:EU;4:PU} }

我有一个数组var k={"Eu","PU","MS","EU","PU"}我只需要EU PU MS因为EUPU是重复的。如何删除重复元素大批。

在推送值之前检查元素是否已存在于数组中。

for(var i=0;i<d.length;i++)
{
  current=d[i].businessunits;
  if(arraynew.indexOf(current) === -1) arraynew.push(current);//array new like this {0:EU;1:PU;2:MS;3:EU;4:PU}
}

在 ES6 中,您可以使用Set ,因为 set 只保留一个相同的元素。

所有大写的解决方案。

 var k = ["EU", "PU", "MS", "EU", "PU"]; k = [... new Set(k)]; console.log(k);

混合大小写的解决方案。

 var k = ["Eu", "PU", "MS", "EU", "PU"]; k = [... new Set(k.map(a => a.toUpperCase()))]; console.log(k);

哈希表是一个很好的工具。 这是一些伪代码:

  1. 迭代数组并将每个项目作为键添加到哈希表中(如果它不存在)
  2. 返回哈希表中的键列表。

如果您使用的是支持集合的语言,那就更简单了——只需为数组中的每个元素更新一次集合。

使用Array.forEachArray.indexOf函数的简单解决方案:

 var arr = ["Eu","PU","MS","EU","PU"], result = []; arr.forEach(function(v){ result.indexOf(v.toUpperCase()) === -1 && result.push(v.toUpperCase()); }); console.log(result);

适用于所有浏览器:

myArray.filter(function (x, i, a) { 
    return a.indexOf(x) == i; 
});

对于现代浏览器

[...new Set(myArray)]

在新数组中添加元素之前进行以下代码检查。 新数组不包含重复元素

for(var i=0;i<d.length;i++)
{
   current=d[i].businessunits;
   if(arraynew.indexOf(current) === -1) // if new array not contains element add in new array 
      arraynew.push(current);
}

您可以对数组进行排序并推送不匹配的元素。

排序 + array.reduce

 var a = ["EU", "PU", "MS", "EU", "PU"]; var r = []; a.sort().reduce(function(p,c){ if(p!==c) r.push(c) return c; }, ''); console.log(r)

排序 + 为

 var a = ["EU", "PU", "MS", "EU", "PU"]; var r = [a[0]]; a.sort() for(var i = 0; i<a.length -2; i++){ if(a[i] !== a[i+1]) r.push(a[i+1]) } console.log(r)

简单的解决方案

var checkDuplicateObject = {},arraynew = [];
for(var i=0;i<d.length;i++)
{
   if(checkDuplicateObject(d[i].businessunits)){
   }else{
    var current = d[i].businessunits;
    arraynew.push(current);  
    checkDuplicateObject[d[i].businessunits] = true;
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM