Javascript–;创造;“一些”;功能
尝试创建“一些”函数。i、 例如,如果数组中的任何元素满足条件,则返回trueJavascript–;创造;“一些”;功能,javascript,Javascript,尝试创建“一些”函数。i、 例如,如果数组中的任何元素满足条件,则返回true function some(array, predicate) { for (var i = 0; i < array.length; i++) { if (predicate(array[i])) return true; } return false; } console.log(some([NaN, 3, 4], isNaN)); // → true console.lo
function some(array, predicate) {
for (var i = 0; i < array.length; i++) {
if (predicate(array[i]))
return true;
}
return false;
}
console.log(some([NaN, 3, 4], isNaN));
// → true
console.log(some([2, 3, 4], isNaN));
// → false
函数some(数组、谓词){
对于(var i=0;i
问题1:以上是书中的解决方案,我不确定为什么“return false”会在所有情况下覆盖“return true”。上述解决方案似乎表明,只有在从未运行过“return true”的情况下,才会运行“return false”——为什么
我的解决方案是这样的
var some = function(array, condition) {
var answer = false;
for(var i=0; i<array.length; i++) {
if(condition(array[i])) {answer = true};
}
return answer
};
var some=函数(数组、条件){
var-answer=false;
对于(var i=0;ireturn
控制当前正在执行的脚本的执行指针的位置。当遇到return
时,它会将执行指针移出函数,因此,函数将停止执行。这意味着如果执行return true
,将返回false
不是。当执行命中return
语句时,它将离开当前函数,而不管它在该函数中的哪个块中
一旦数组元素对应于谓词,它就会返回true。如果执行正常退出for
循环,则意味着没有一个值是有效的,因此我们可以返回false
这本书的答案更好,不是因为它没有创建额外的变量(这没关系),但因为它不会每次都检查所有变量。一旦数组元素有效,它就会退出函数。本书中的解决方案基于这样一个事实,即
for
循环体中使用的return
关键字将导致循环停止执行并返回
查看文档中的中断功能部分,该部分说明:
return语句结束函数执行并指定要执行的值
返回给函数调用方
在您的示例中,只要匹配了条件
,书籍的解决方案将不再继续遍历数组并返回(因为根据上面的定义,返回就是这样做的)
让我们看看您的解决方案:
var some = function(array, condition) {
var answer = false;
for(var i=0; i<array.length; i++) {
if(condition(array[i])) {answer = true};
}
return answer
};
var some=函数(数组、条件){
var-answer=false;
对于(var i=0;i您可以使用Array
,some()
的内置方法:
这个函数的作用是
function some(array, predicate) { // return a boolean value (true, false)
// as soon an Array key matches `predicate`
for (var i = 0; i < array.length; i++) {
if (predicate(array[i])) return true; // if Array key isNaN exit function as `true`
}
// We're 1. already out of the function or 2. all keys are looped.
// This function needs to return a boolean so exit with `false`
// since all Array keys are Numbers
return false;
}
函数some(数组,谓词){//返回布尔值(true,false)
//只要数组键与`谓词匹配`
对于(var i=0;i
以上说明了一切。记住上面的部分:
一旦数组键与谓词匹配,就返回一个布尔值(true、false)。
在您的示例中,您没有退出函数,因此如果您传递了一个示例
由1000个键组成的数组,每个键都将循环,函数不打算这样做,因为它的目的是:
如果至少有一个键与谓词条件匹配,则返回(退出)为true
function some(array, predicate) {
for (var i = 0; i < array.length; i++) {
if (predicate(array[i]))
return true;
}
return false;
}
console.log(some([NaN, 3, 4], isNaN));
// → true
console.log(some([2, 3, 4], isNaN));
// → false
循环所有其他键是无用的,因为我们已经发现一个键匹配
是的,var
会消耗解释器内存(无需担心)。因为如果你返回true,你就会离开函数,return false
永远不会执行。值得一提的是,如果你不想重新发明轮子:我觉得我的英语在这个答案中很糟糕,如果你知道如何“word”,建议我编辑一下这样更好。