正在使用一个函数来验证array
中的每个数字是true
还是false
并返回第一个真number
。
具有如下所示的for循环工作解决方案:
function findElement(arr, func) {
var num;
for (var a = 0; a < arr.length; a++) {
if (func(arr[a])) {
num = arr[a];
return num;
}
}
return num;
}
findElement([1, 3, 5, 8, 9, 10], function(num) {
return num % 2 === 0;
})
// Should return 8
但是我正在尝试(以便更好地了解forEach
)将其转换为forEach
循环。
到目前为止,这是我要去的地方,但是在确定函数结果为true之后,我看不出如何将num
真正从循环中返回:
function findElement(arr, func) {
if (arr.forEach(func) === true) {
return num;
}
}
findElement([1, 2, 3, 4], num => num % 2 === 0);
答案 0 :(得分:1)
不确定如何使用forEach
,但可以使用array.prototype.filter:
function findElement(arr, func) {
return arr.filter(func)[0];
}
@cdhowie建议使用array.prototype.find,以使用[0]
。
function findElement(arr, func) {
return arr.find(func);
}
很明显,这只是一个猜测,因为如果数组中的任何项都不符合func
的要求,则可能会引发错误。
如果您仍在使用forEach
,也许您可以这样做:
function findElement(arr, func) {
matches = []
arr.forEach((item) => {
if (func(item)) {
matches.push(item)
}
});
return matches[0];
}
或者:
function findElement(arr, func) {
match = null
arr.forEach((item) => {
match = (match == null && func(item)) ? item : match
});
return match;
}
同样,如果数组中没有项目符合func
的要求,则必须检查如何处理错误。
两个代码中的任何一个都会产生
console.log(findElement([1, 3, 5, 8, 9, 10], function(num) { return num % 2 === 0; })))
8
答案 1 :(得分:1)
function findElement(arr, func) {
var num;
arr.forEach(function(element) {
if (!num && func(element)) {
num = element;
}
});
return num;
}
有关更多选项,您可以检查以下问题:how to stop Javascript forEach?
答案 2 :(得分:0)
正如已经提到的,这不是应该使用forEach
的方式。
但是,您仍然可以获得所需的行为:
function findElement(arr, func) {
var num;
arr.forEach(item =>{
if (func(item)) {
num = item;
// .forEach does not have an early return
// but you can force it to skip elements by removing them
while (true) {
// Remove all elements
var removedItem = arr.shift();
if (removedItem === undefined) {
// All elements removed
break;
}
}
}
return num;
}
中甚至提到了这一点
答案 3 :(得分:-1)
也许是这样
function findElement(arr, func) {
var num = null;
for (var a = 0; a < arr.length && num === null; a++) {
var val = arr[a];
num = func(val) ? val : null;
}
return num;
}
console.log(findElement([1, 3, 5, 8, 9, 10], function(num) {
return num % 2 === 0;
}));
答案 4 :(得分:-1)
这是带有foreach的findElement方法
function findElement(arr, func) {
var num = 0;
arr.forEach(function(item){
if (func(item))
return item;
})
return num;
}