今天在做reduce()练习的时候,遇到了这样一个函数:
var arr=[3,5,6,2,2,4];
var newArr = arr.reduce(function (prev, cur) {
prev.indexOf(cur) === -1 && prev.push(cur);
return prev;
},[]);
//==>[ 3, 5, 6, 2, 4 ]
于是我在想,能不能if来做判断,于是写了这样一个片段
var arr=[3,5,6,2,2,4];
var newArr = arr.reduce(function (prev, cur) {
if (prev.indexOf(cur) === -1){
prev.push(cur);
return prev;
}
},[]);
报错
==>TypeError: prev.indexOf is not a function
问题出现在哪里?我们来看这个if函数,如果prev.indexOf(cur) === -1为false呢?prev就没办法return了,所以解决方案很简单,把return放到if后面就能成功return了。
var arr=[3,5,6,2,2,4];
var newArr = arr.reduce(function (prev, cur) {
if (prev.indexOf(cur) === -1){
prev.push(cur);}
return prev;
},[]);
newArr
//==> [ 3, 5, 6, 2, 4 ]