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循环参数不正确,但事实并非如此。任何帮助,将不胜感激。谢谢
答案 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++) {