使用reduce计数数组中每个元素的出现次数。 我的代码是错误的!
我的代码:
function countOccurrences(arr) {
return arr.reduce(function(a, b){
var count = 0;
for(var i = 0; i < arr.length; i++){
if (arr[i] == b) {
return count + 1;
}
}
}, '');
}
console.log(countOccurrences(['a', 'b', 'c', 'b', 'a']));
期望:
// {
// a: 2,
// b: 2,
// c: 1
// }
非常感谢!
答案 0 :(得分:2)
您犯了两个错误:
a
作为第二个参数,您将''
的初始值转换为空字符串。reduce()
内再次循环。 reduce()
遍历所有元素。
function countOccurrences(arr) {
return arr.reduce(function(a, b){
a[b] = a[b] + 1 || 1
return a;
}, {});
}
console.log(countOccurrences(['a', 'b', 'c', 'b', 'a']));
使用“箭头功能”的班轮将是
const count = (arr) => arr.reduce((ac,a) => (ac[a] = ac[a] + 1 || 1,ac),{})
console.log(count(['a', 'b', 'c', 'b', 'a']));
答案 1 :(得分:0)
您可以使用reduce
遍历数组并将其汇总为一个对象。将累加器初始化为对象{}
。检查每个字母是否作为累加器中的属性存在。如果不是,则启动为0,然后加1。
function countOccurrences(arr) {
return arr.reduce((a, b) => (a[b] = (a[b] || 0) + 1, a), {});
}
let result = countOccurrences(['a', 'b', 'c', 'b', 'a']);
console.log(result);
答案 2 :(得分:0)
在reduce中,将空对象用作初始累加器。在此对象中检查是否存在相关密钥。如果是这样,则增加计数,否则创建密钥并为其分配值
function countOccurrences(arr) {
return arr.reduce(function(acc, curr) {
if (acc[curr]) {
acc[curr] += 1;
} else {
acc[curr] = 1
}
return acc;
}, {})
}
console.log(countOccurrences(['a', 'b', 'c', 'b', 'a']));