查询关于 Javascript(回调和 forEach)

Query about Javascript (Callback and forEach)

所以,我正在尝试使用 forEach 编写一个名为 count(arr, callback) 的函数。

理论上应该return回调为真的元素数。

count([1, 2, 3, 4], (e) => e === 3)

预期:1 但得到:0

count([1, 2, 3, 4], (e) => e > 1)

预期:3 但得到:0

count([2, 1, 4, 5, 2, 8], (e) => e === 2)

预期:2 但得到:0

这是我的代码 运行:

function count(arr, callback) {
  let values = 0;
  arr.forEach(callback) ? values++ : values;

  return values;
}

forEach 忽略其回调的 return 值。使用 reduce 代替:

const count = (arr, cb) => arr.reduce((a, item) => a + cb(item), 0);

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))

function count(arr, callback) {
  let values = 0;
  arr.forEach(item => callback(item) ? values++ : values);
  return values;
}

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))

使用filter:

const count = (arr, c) => arr.filter(c).length;

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))