如何使用 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
可以强制为 1
和 false
为 0
的事实。
function count(arr, pred){
return arr.reduce((sum, x) => sum + !!pred(x), 0);
}
console.log(count([1, 2, 3, 4], (e) => e === 3));
我需要帮助创建一个计数函数,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
可以强制为 1
和 false
为 0
的事实。
function count(arr, pred){
return arr.reduce((sum, x) => sum + !!pred(x), 0);
}
console.log(count([1, 2, 3, 4], (e) => e === 3));