我试图从数组返回第一个大于25的值,而不使用其他方法,如filter。假设数组总是排序。
该函数始终返回undefined。为什么会这样?这是代码:
function checkArr(arr){
arr.forEach(i => {
if (i>25) return i;
})
}
console.log(checkArr([10,20,34,45]))
输出应为34。
答案 0 :(得分:5)
使用forEach
时,为数组中的每个项执行另一个函数。该函数可以很好地返回一个值,但它会被完全忽略。如果要在checkArr
函数中返回值,则必须执行以下操作:
function checkArr(arr) {
for (let i of arr) {
if (i>25) return i;
}
}
答案 1 :(得分:2)
您可以使用find
功能代替forEach
。并且您必须返回此函数的结果才能获得答案,而不是undefined
。
function checkArr(arr) {
return arr.find(i => i > 25);
}
console.log(checkArr([10,20,34,45]))

forEach
函数不返回任何内容,它只是对数组中的每个元素进行一些操作。
答案 2 :(得分:1)
你的功能没有返回任何东西。并且在forEach
内返回会产生任何影响,因为forEach
始终会返回undefined
。您可以使用简单的while
循环来执行此操作:
function checkArr(arr){
var i = 0;
while (i<arr.length) {
if (arr[i]>25) return arr[i];
i++;
}
return null; // if no entry is greater than 25
}
console.log(checkArr([10,20,34,45]));
&#13;
答案 3 :(得分:1)
forEach()
方法为每个数组元素执行一次提供的函数。
从上面的陈述中可以清楚地看出,你不能从循环执行的中间返回。
使用for...of
循环代替条件true
时返回:
function checkArr(arr){
for(var item of arr){
if (item > 25) return item;
}
}
console.log(checkArr([10,20,34,45]))
答案 4 :(得分:0)
好像你正在寻找find
:
function checkArr(arr) {
return arr.find(i => i>25);
}
console.log(checkArr([10,20,34,45]));
答案 5 :(得分:0)
这是因为您在调用.forEach
时传递了委托功能。
代表的回归正在迷失,并不适用于任何事情。要获得所需的结果,您需要退出调用函数checkArr
。
这可以使用简单的for循环来完成。
function checkArr(arr){
for (var i = 0; i < arr.length++; i++) {
if (arr[i] > 25) return arr[i];
}
}
console.log(checkArr([10,20,34,45]))
&#13;
此方法还支持较旧的浏览器,不像某些浏览器,每个和每个forEach