我正在尝试创建一个简单的函数,以检查数组中的所有项目是否都按顺序排列,但这给了我一些不良行为。我想出了这个:
const isArrayInOrder = (array) => {
let lowNum = Number.NEGATIVE_INFINITY;
array.forEach((element, index) => {
if (element < lowNum) {
console.log("False");
return false;
}
lowNum = element;
});
console.log("True!");
return true;
};
let testArray = [1, 2, 3, 4, 7, 11, 22, 31, 800];
isArrayInOrder(testArray);
let testArray2 = [-800, -30, -5, 0, 10, 55, 200, 2000, 1999];
isArrayInOrder(testArray2);
按预期,用isArrayInOrder()
调用testArray
返回true
。
用isArrayInOrder()
调用testArray2
会返回false
,但随后继续意外地执行了函数底部的console.log("True!")
命令。
在我看来,一旦return false
被击中,它应该是函数的结尾,对吗?那么如何使它进入第二console.log?
答案 0 :(得分:1)
您需要了解return将返回内部函数。
因此,如果您这样做:
const outerFunction = () => {
const innerFunction = () => {
return 'inner';
}
console.log(innerFunction()); // outputs 'inner';
return 'outer';
}
console.log(outerFunction()); // outputs 'outer';
您要寻找的是Array.prototype.every():
const isArrayInOrder = (array) => {
let lowNum = Number.NEGATIVE_INFINITY;
return array.every((element, index) => {
if (element < lowNum) {
return false;
} else {
lowNum = element;
return true;
}
});
};