如何解决需要使用forEach来返回'callback'函数结果为true的元素个数
我需要使用 forEach 来解决这个解决方案,我有点卡住了!我认为我不能像使用 for 循环那样使用“计数”,因为我无法在 forEach 中返回。所以我写的仍然是错误的,但这是我目前所写的:
function count(arr,callback) {
let result = 0;
arr.forEach(ele => {
if (ele === callback()) {
result += ele.length;
}
});
return result;
}
但它并没有通过所有测试:
>
count([1,2,3,4],(e) => e === 3);
Expected: 1 but got: 0
>
count([1,(e) => e > 1);
Expected: 3 but got: 0
>
count([2,1,4,5,8],(e) => e === 2);
Expected: 2 but got: 0
>
count(['a','b'],(e) => e === 'd');
Expected: 0 OK!
>
count([],(e) => e === 'd');
Expected: 0 OK!
有人可以提供任何帮助吗?重申一下,我确实需要使用 forEach 来解决这个问题!
解决方法
你的 callback
是一个函数,它接受一个元素并检查它是否匹配一个值
(e) => e === 2
=> 取一个 e
并检查 e 是否为 2
所以在用 forEach 迭代时需要传递数组项
对于每场比赛,您将 result
增加 1 而不是 ele.length
function count(arr,callback) {
let result = 0;
arr.forEach(ele => {
if (callback(ele)) { // Pass ele to the callback
result += 1; // Add 1 to result for every match
}
});
return result;
}
console.log(`Expected: ${count([2,1,4,5,2,8],(e) => e === 2)}`);
您的解决方案有两个问题,
- 您正在调用
callback
但没有传递值 - 从
callback
中您需要一个布尔值,因此再次不需要ele === callback()
。
它不工作的原因是因为 ele === callback()
永远不会得到满足。
所以,你可以像这样修改代码
function count(arr,callback) {
let result = 0;
arr.forEach(ele => {
//call the callback with the element
if (callback(ele)) {
//Update the count by 1 when truthy value returned from callback
result += 1;
}
});
return result;
}
console.log(count([1,3,4],(e) => e === 3));
console.log(count([1,(e) => e > 1));
console.log(count([2,(e) => e === 2));
console.log(count(['a','b'],(e) => e === 'd'));
console.log(count([],(e) => e === 'd'));
问题出在 if 块中。您需要将元素传递给 callback()
,然后检查它是否返回 true 或 false。如果为真,结果加 1。
function count(arr,callback) {
let result = 0;
arr.forEach(ele => {
if ( callback(ele)) {
result += 1;
}
});
return result;
}
console.log(count([1,(e) => e === 'd'));
尝试过滤器解决方案:
function count(arr,callback) {
const result = arr.filter(callback);
return result.length;
}
function count(arr,callback) {
let result =[];
arr.forEach(ele => {
if (callback(ele)) {
result.push(ele);
}
});
return result.length;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。