在JavaScript中,是否可以只使用.filter()来删除重复项(第一个实例是保留的实例)

In JavaScript, is it possible to only use .filter() to remove duplicates (the first instance is the one that is kept)?

本文关键字:实例 删除 第一个 JavaScript 保留 是否 filter      更新时间:2023-09-26

我有一个简单的解决方案:

function removeExtra(arr) {
  var args = [...arguments]
  .reduce(function(prev,curr){return prev.concat(curr)});
  var answer = [];
  for (var i = 0; i < args.length; i++) {
    if (answer.indexOf(args[i]) == -1)
        answer.push(args[i]);
  }
  return answer;
}
console.log(removeExtra([1, 3, 2], [5, 2, 1, 4], [2, 1]));
//-> Returns [1, 3, 2, 5, 4]

但是,我正在尝试实践JavaScript函数方法的逻辑,在本例中是.filter()。有办法这样做吗?

function removeExtra(arr) {
  return [...arguments]
  .reduce( (pre,cur) => pre.concat(cur) )
  //.filter( x => ??? );
}
console.log(removeExtra([1, 3, 2], [5, 2, 1, 4], [2, 1]));
//-> Should be [1, 3, 2, 5, 4]

编辑1:

如建议,目前正在研究Set()。这是我第一次遇到它。马上回来做研究工作!

编辑2:

非常感谢@Kaspars和@gcampbell介绍Set()!!我现在有了我的解决方案:

function removeExtra(someArgs) {
  return [... new Set(
    [...arguments].reduce(function(prev,curr){
            return prev.concat(curr);
    })
  )]
}

这只是对gcampbell答案的一个小修订,因为我必须使用[... new Set()]Set转换回Array

您可以使用Set。

function removeExtra() {
    const uniques = new Set();
    for(const array of ...arguments) {
        for(const element of array) {
            uniques.add(element);
        }
    }
    return Array.from(uniques);
}