这不起作用:
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]
我的问题是为什么第一种方式不起作用?
答案 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);
您可以使用in
或includes
,而不是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);