使用forEach删除数组中的重复项

时间:2019-02-19 02:10:39

标签: javascript arrays

早上好,我正在尝试使用forEach循环从数组中删除重复的元素。但是在这个时候我遇到了一些错误。以下是我的代码

function removeDup(arr) {
    let result = arr.forEach((item, index) => { if (index > 1) item.shift() });
    return result;
}

我什至不确定此代码是否可以删除重复项,因为当我在浏览器console中运行它时,会出现此错误

  

如果(索引> 1)item.shift();                               ^

     

TypeError:item.push不是函数

首先,我该如何解决此错误,其次,此代码可用于删除重复项?

4 个答案:

答案 0 :(得分:5)

您可以尝试:

function removeDup(arr) {
  let result = []
  arr.forEach((item, index) => { if (arr.indexOf(item) == index) result.push(item) });
  return result;
}

说明:

首先使用空数组初始化结果。然后遍历传递的数组,检查索引是否是它的第一个项目。推送到结果数组。返回结果数组。

替代解决方案:

function removeDup(arr) {
  let result = []
  arr.forEach((item, index) => { if (result.indexOf(item) === -1) result.push(item) });
  return result;
}

说明:

通过检查该元素是否已经被推入结果数组,可以避免将索引作为第一次出现。

答案 1 :(得分:2)

为什么不使用Set?例如

var arr = ['a', 'b', 'a']                                                                               
var unique = Array.from(new Set(arr))                                                                   
console.log(unique) // ['a', 'b']

答案 2 :(得分:1)

function findDuplicates(data) {

  let result = [];

  data.forEach(function(element, index) {
    //Checks data.indexOf(1) which is 0 === 0, then push it to array
    //Now again when it checks the value of 1 which corresponds to a value of 1 but in forloop has an index of 5, so exits and duplicate values are not pushed
    if (data.indexOf(element) === index) {
      result.push(element)
    }
  });

  return result;
}

console.log(findDuplicates([1, 2, 3, 4, 5, 1, 2]))

答案 3 :(得分:1)

您可以使用filter,它将返回一个新的数组集作为您的检查条件

  

indexOf()方法在数组中搜索指定的项,并返回其位置。

     

搜索将从指定位置开始,或者如果未指定起始位置,则从搜索开始,然后在数组末尾结束搜索。

     

如果找不到该项目,则返回-1。

     

如果该项目多次出现,则indexOf方法将返回第一次出现的位置。

function removeDup(arr) {
    let result = arr.filter(function (item, pos) {return arr.indexOf(item) == pos});  
    // at first loop -> item = 1 -> so indexOf = 0 & pos = 0 -> so return data
    // at second loop -> item = 4 -> so indexOf = 1 & pos = 1 -> so return data
    // at third loop -> item = 5 -> so indexOf = 2 & pos = 2 -> so return data
    // at fourth loop -> item = 4 -> so indexOf = 1 & pos = 3 -> no return
    // at fifth loop -> item = 1 -> so indexOf = 0 & pos = 4 -> no return
    return result;
}

var d = removeDup([1,4,5,4,1]);
console.log(d);