Javascript 为什么这个函数返回未定义?
我现在正在做一个练习,我不明白为什么会返回未定义Javascript 为什么这个函数返回未定义?,javascript,Javascript,我现在正在做一个练习,我不明白为什么会返回未定义 function every(array, compare) { var newArray = array.filter( function(property) { return compare(property); } ); if (newArray === undefined || newArray.length == 0) { return f
function every(array, compare) {
var newArray = array.filter(
function(property) {
return compare(property);
}
);
if (newArray === undefined || newArray.length == 0) {
return false;
}
}
console.log(every([NaN, NaN, NaN], isNaN));
// → true
console.log(every([NaN, NaN, 4], isNaN));
// → false
正如你所看到的,我应该得到正确和错误,但是我得到了未定义和未定义。为什么会这样?我想这是因为我没有正确理解isNaN,但我不是100%确定。
isNaN
当它的参数为NaN
时返回true,这意味着你的过滤函数保留了NaN
,但删除了其他所有内容。如果数组中没有NaN,则其长度仅为0
。对于这样的数组,函数返回false:
console.log(every([4], isNaN)); // false
这似乎与你想要的正好相反。您每次调用函数,但它的行为更像是应该调用some
对于其他所有内容,它都返回undefined
(而不是true
),因为在任何其他情况下都没有返回语句。唯一的return语句在if语句中,因此如果条件不是truthy,它将返回undefined
。修复它的一种方法是更改它,以便它返回比较的结果newArray.length==array.length
:
function every (array, compare){
var newArray = array.filter(
function (property){
return compare(property);
}
);
return newArray.length === array.length;
}
console.log(every([NaN, NaN, NaN], isNaN));
// → true
console.log(every([NaN, NaN, 4], isNaN));
// → false
另一种方法是在过滤器回调(请参见@Shomz的答案)中对compare
的返回值求反,然后returnnewarray.length==0代码>
if (newArray === undefined || newArray.length == 0)
return false;
仅当新数组为空或未定义时,才会触发此操作。否则,函数返回未定义的
。修复此问题,并反转回调函数的返回,因为当值不是数字时,isNaN
为真
请看这里:
每个函数(数组、比较){
var newArray=array.filter(
功能(属性){
返回!比较(属性);
}
);
返回newArray.length==0;
}
log(每个([NaN,NaN,NaN],isNaN));
// → 真的
log(每([NaN,NaN,4],isNaN));
// → false
如果未运行,会发生什么情况?默认情况下,函数返回未定义的
。我应该得到true和false
-函数何时返回true
?请注意过滤器中的返回
并不是从每个
函数返回,它只是确定过滤器结果(对于单个数组元素).return array.filter(compare).length
您不应该使用filter
来实现every
。使用普通循环。如果您想使用内置方法,请选择every
,如果您不想破坏乐趣,请使用reduce
实现它。注意newArray===undefined
是不可能的,因为永远不会返回undefined
。条件也可以缩短为newArray.length==0
@Paulpro,这是事实,谢谢。基本上,OP只需要更改return语句。我会更新我的答案。@Jeffburghes不客气,我很乐意帮忙!虽然我认为Paulpro的答案更好。啊,事实上是这样的。我甚至没有意识到还有其他答案。当我开始写我的答案时,我看不到你的答案。这就是所需要的。