查询关于 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))
所以,我正在尝试使用 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))