循环期间的函数调用错误地返回了未定义的

时间:2019-01-24 16:41:40

标签: javascript

js的新手,我正在尝试解决一个非常简单的问题。我不确定为什么它不起作用。必须是我不熟悉的js怪癖。有人可以告诉我为什么x返回未定义状态,从而导致我的函数在应返回true时返回false吗?我正在尝试为数组复制“每个”方法,如果数组元素之一从回调中返回false,则返回false。

我尝试用webstorm进行调试,但仍然找不到解决方案。这是我的代码,

function every_loop(array, test) {
  for (let index = 0; array.length - 1; index++) {
    let x = test(array[index]);
    if (!x) {
      console.log(array[index], index);
      return false;
    }
  }
  return true;
}

console.log(every_loop([1, 2, 3, 4, 5], n => n >= 1));

我的输出应该为true时为false。另外,在输出false之前,它显示undefined为array [index]的值,这使我相信我的for循环参数不正确,但事实并非如此。任何帮助,将不胜感激。谢谢

4 个答案:

答案 0 :(得分:2)

您缺少function bodyKeyHandler(o,e) { var c = e.ctrlKey; var k = e.which; if (e.ctrlKey) { switch ( k ) { case 17: e.preventDefault(); o.stopPropagation(); break; } } } function editorKeyHandler(e) { var c = e.ctrlKey; var k = e.which; if (c) { switch ( k ) { case 17: document.execCommand("bold"); break; } } } 循环的第二个参数的子句。 将其更改为for可以修复您的代码。

index <= array.length - 1

答案 1 :(得分:1)

您的for循环中断。我会推荐for..of-

function everyLoop (arr, test) {
  for (const x of arr)
    if (!test(x))
      return false
  return true
}

console.log(everyLoop([1,2,3,4,5], n => n >= 1)) // true
console.log(everyLoop([1,2,3,4,5], n => n >= 2)) // false

您说的是实践,但只知道JavaScript 确实包括一个内置的Array#every即可做到-

console.log([1,2,3,4,5].every(n => n >= 1)) // true
console.log([1,2,3,4,5].every(n => n >= 2)) // false

答案 2 :(得分:1)

您在for循环中的条件将始终为true。 (array.length-1==4)。因此,请改用此:

function every_loop(array, test) {
        for (let index = 0; index<array.length;index++) {
            let x = test(array[index]);
            if (!x) {
                return false;
            }
    }
    return true;
}

console.log(every_loop([1,2,3,4,5], n => n >= 1));
console.log(every_loop([0,1,2,3,4,5], n => n >= 1));

答案 3 :(得分:1)

替换

for (let index = 0; array.length - 1; index++) {

for (let index = 0; index < array.length; index++) {