使用underscore.js计算对象属性

Bis*_*opZ 1 javascript underscore.js

所以我想用一个更好的方法用下划线来做到这一点:

state.attributes = _.reduce(list, function(memo, item){ 
    memo['neighborhood'] = (memo['neighborhood'] || []);
    var isNew = true;
    _.each(memo['neighborhood'], function(hood){
        if (hood.name === item.data.neighborhood) {
            hood.count++; isNew=false;
        } 
    });
    if(isNew){
        memo['neighborhood'].push({name:item.data.neighborhood, count:1});
    }
    return memo;
});
Run Code Online (Sandbox Code Playgroud)

我想将列表的各种名称组合成一个唯一名称列表,其中包含每个唯一名称出现次数的计数.看起来完全是下划线设计要解决的问题,但我能想到的最佳解决方案似乎不那么优雅.

ZER*_*ER0 5

我不是一个underscore.js用户,但我认为_.groupBy()适合这种情况:

var attributes = _.groupBy(list, function (item) {
    return item.data.neighborhood
})
Run Code Online (Sandbox Code Playgroud)

它不会以您想要的方式返回数组,但它包含您需要的所有信息.因此,您在attributes["foo"]所有具有"foo"作为neighborhoodvalue属性的项目中,因此在attributes["foo"].length它们的计数中.