【发布时间】:2019-05-10 10:07:01
【问题描述】:
我正在尝试使用 reduce 解决以下问题,但我无法获得对象中偶数和奇数的正确计数。
有人可以指导我了解我的代码有什么问题吗?
创建一个接受数组和回调的函数
countBy,然后 返回一个对象。countBy将遍历数组并执行 每个元素的回调。回调的每个返回值都会 保存为对象上的键。与每个键关联的值 将是返回特定返回值的次数
function countBy(arr, fn) {
return arr.reduce(function(acc, nums) {
// console.log(nums);
let oddCount = 0
let evenCount = 0
console.log(nums, fn(nums))
if(fn(nums) === "even"){
evenCount++;
acc['even'] = evenCount;
} else {
oddCount++;
acc['odd'] = oddCount;
}
return acc
}, {}, 0)
}
function evenOdd(n) {
if (n % 2 === 0) return "even";
else return "odd";
}
var nums = [1, 2, 3, 4, 5];
console.log(countBy(nums, evenOdd)); // should log: { odd: 3, even: 2 }
【问题讨论】:
-
您还没有发布更多内容吗?因为从表面上看,我不认为这是返回有多少奇数和偶数。我读这个是因为他们想要一个函数来计算给定数组中每个唯一值的出现次数。例如
[1,1,2,4,4,4]将返回{1:2,2:1,4:3}类似于 php 的 array_count_values
标签: javascript arrays reduce higher-order-functions