如何使用 for each 循环根据使用 JavaScript 的给定回调计算数组中出现的次数?

How do I use a for each loop to count the number of occurences in an array based on a given callback using JavaScript?

我需要帮助创建一个计数函数,returns 回调为真的元素数。

例如,如果数组和回调如下: 计数([1, 2, 3, 4], (e) => e === 3); 预期的答案是 1.

或者如果数组和回调如下: count([], (e) => e === 'd'); 预期结果为 0。

如何创建这个计数函数?它必须为每个循环使用一个。

假设您指的是同步回调(如您的示例中所示),那么内置 [].filter 基本上会为您完成此操作。

let count = (array, predicate) => array.filter(predicate).length;

console.log(count([1, 2, 3, 4, 3, 2, 1], (e) => e >= 3));

只需保留每次谓词 returns 为真时递增的计数。

function count(arr, pred){
  let count = 0;
  arr.forEach(x => {
    if(pred(x)) ++count;
  });
  return count;
}
console.log(count([1, 2, 3, 4], (e) => e === 3));

Array#reduce 也可以用于此,利用 true 可以强制为 1false0 的事实。

function count(arr, pred){
  return arr.reduce((sum, x) => sum + !!pred(x), 0);
}
console.log(count([1, 2, 3, 4], (e) => e === 3));