Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript–;创造;“一些”;功能_Javascript - Fatal编程技术网

Javascript–;创造;“一些”;功能

Javascript–;创造;“一些”;功能,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

尝试创建“一些”函数。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.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;i
return
控制当前正在执行的脚本的执行指针的位置。当遇到
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”,建议我编辑一下这样更好。