需要用forEach来return'callback'函数结果为真的元素个数
Need to use forEach to return the number of elements for which the 'callback' function result is true
我需要使用forEach来解决这个问题,我有点卡住了!我认为我不能像使用 for 循环那样使用 'count',因为我不能在 forEach 中使用 return。所以我写的仍然是错误的,但这是我目前所拥有的:
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, 2, 3, 4], (e) => e > 1);
Expected: 3 but got: 0
>
count([2, 1, 4, 5, 2, 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 来解决这个问题!
问题出在 if 块中。您需要将元素传递给 callback()
,然后检查它返回的是真还是假。如果为真,则将结果递增 1。
function count(arr, callback) {
let result = 0;
arr.forEach(ele => {
if ( callback(ele)) {
result += 1;
}
});
return result;
}
console.log(count([1, 2, 3, 4], (e) => e === 3));
console.log(count([1, 2, 3, 4], (e) => e > 1));
console.log(count([2, 1, 4, 5, 2, 8], (e) => e === 2));
console.log(count(['a', 'b'], (e) => e === 'd'));
console.log(count([], (e) => e === 'd'));
你的 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)}`);
尝试过滤解决方案:
function count(arr, callback) {
const result = arr.filter(callback);
return result.length;
}
你的解决方案有两个问题,
- 您正在调用
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, 2, 3, 4], (e) => e === 3));
console.log(count([1, 2, 3, 4], (e) => e === 3));
console.log(count([1, 2, 3, 4], (e) => e > 1));
console.log(count([2, 1, 4, 5, 2, 8], (e) => e === 2));
console.log(count(['a', 'b'], (e) => e === 'd'));
console.log(count([], (e) => e === 'd'));
function count(arr, callback) {
let result =[];
arr.forEach(ele => {
if (callback(ele)) {
result.push(ele);
}
});
return result.length;
}
我需要使用forEach来解决这个问题,我有点卡住了!我认为我不能像使用 for 循环那样使用 'count',因为我不能在 forEach 中使用 return。所以我写的仍然是错误的,但这是我目前所拥有的:
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, 2, 3, 4], (e) => e > 1);
Expected: 3 but got: 0
>
count([2, 1, 4, 5, 2, 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 来解决这个问题!
问题出在 if 块中。您需要将元素传递给 callback()
,然后检查它返回的是真还是假。如果为真,则将结果递增 1。
function count(arr, callback) {
let result = 0;
arr.forEach(ele => {
if ( callback(ele)) {
result += 1;
}
});
return result;
}
console.log(count([1, 2, 3, 4], (e) => e === 3));
console.log(count([1, 2, 3, 4], (e) => e > 1));
console.log(count([2, 1, 4, 5, 2, 8], (e) => e === 2));
console.log(count(['a', 'b'], (e) => e === 'd'));
console.log(count([], (e) => e === 'd'));
你的 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)}`);
尝试过滤解决方案:
function count(arr, callback) {
const result = arr.filter(callback);
return result.length;
}
你的解决方案有两个问题,
- 您正在调用
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, 2, 3, 4], (e) => e === 3));
console.log(count([1, 2, 3, 4], (e) => e === 3));
console.log(count([1, 2, 3, 4], (e) => e > 1));
console.log(count([2, 1, 4, 5, 2, 8], (e) => e === 2));
console.log(count(['a', 'b'], (e) => e === 'd'));
console.log(count([], (e) => e === 'd'));
function count(arr, callback) {
let result =[];
arr.forEach(ele => {
if (callback(ele)) {
result.push(ele);
}
});
return result.length;
}