嗨,我想知道我是否可以在这里得到一些帮助。我正在尝试创建一个直方图函数,它采用类似['a','a','b','c','b','a']的数组并返回{a:3,b:2,c :1}使用reduce函数构建直方图函数。但我仍然坚持回调函数应该是什么。
感谢您的回复。
答案 0 :(得分:3)
尝试迭代数组并相应地填充/递增对象的值
var x = ['a', 'a', 'b', 'c', 'b', 'a'];
var y = {};
x.forEach(function(itm){
y[itm] = ++y[itm] || 1;
});
答案 1 :(得分:3)
您可以像这样减少数组:
['a', 'a', 'b', 'c', 'b', 'a'].reduce(function(obj, value) {
obj[value] = obj[value] || 0;
obj[value]++;
return obj;
}, {});
如果您的环境支持Object.assign()和ES6,您也可以这样做:
['a', 'a', 'b', 'c', 'b', 'a']
.reduce((a, b) => Object.assign(a, {[b]: a[b] ? ++a[b] : 1}), {});