删除数组中的重复项

时间:2018-02-09 12:09:55

标签: javascript duplicates

这不起作用:

result = [1, 4, 5, 5, 5];

var newData = result.reduce(function(acc, cur) {
if (cur in acc === false) {
  acc.push(cur);
}
return acc;
},[]);

console.log(newData);

输出:

[1, 4, 5, 5, 5]

我知道一种可行的方法,例如使用以下代码替换if()条件:

if (acc.length == 0 || acc[acc.length-1] !== cur) {
  acc.push(cur);
} 

给出了预期的输出:

[1, 4, 5]

我的问题是为什么第一种方式不起作用?

1 个答案:

答案 0 :(得分:-1)

  

如果指定的属性位于指定的对象或其原​​型链中,则in运算符返回true。

对于result中的每个值,它返回false。因此,您将获得累加器中结果的所有值。如果是数组,in将检查索引。

var result = [1, 4, 5, 5, 5];

var newData = result.reduce(function(acc, cur) {
  if (cur in acc === false) {
    acc.push(cur);
  }
  return acc;
},[]);

console.log(newData);

您可以使用inincludes,而不是indexOf

var result = [1, 4, 5, 5, 5];

var newData = result.reduce(function(acc, cur) {
  if(!acc.includes(cur)) {
    acc.push(cur);
  }
  return acc;
},[]);

console.log(newData);

您可以使用Set获取唯一值。

var result = [1, 4, 5, 5, 5];
var unique = [...new Set(result)];
console.log(unique);