Javascript 主干集合:检索集合的不同值并对不同值求和

Javascript 主干集合:检索集合的不同值并对不同值求和,javascript,jquery,backbone.js,underscore.js,Javascript,Jquery,Backbone.js,Underscore.js,与此相关 鉴于此“样本采集数据”: 我如何从集合中添加不同品牌的数量 并获取以下数据: [{brand:'audi', amount: '168.00'}, {brand:'bmw', amount: '80.70'}] 提前谢谢各位 这是一个非常标准的JavaScript: var o = data.reduce(function(m, e) { // There are lots of ways to do this depending on what sorts // o

与此相关

鉴于此“样本采集数据”:

我如何从集合中添加不同品牌的数量

并获取以下数据:

[{brand:'audi', amount: '168.00'},
{brand:'bmw', amount: '80.70'}]
提前谢谢各位

这是一个非常标准的JavaScript:

var o = data.reduce(function(m, e) {
    // There are lots of ways to do this depending on what sorts
    // of things are going to be values in `m`, we're expecting
    // the values to be non-zero numbers so a simple `!` is fine.
    if(!m[e.brand])
        m[e.brand] = 0;
    m[e.brand] += parseFloat(e.amount);
    return m;
}, { });
如果您担心石器时代的浏览器,请使用
(数据)。减少
或简单循环:

var o = { }, i;
for(i = 0; i < data.length; ++i) {
    if(!o[data[i].brand])
        o[data[i].brand] = 0;
    o[data[i].brand] += parseFloat(data[i].amount]);
}
var o={},i;
对于(i=0;i
只要浮点值都很小,并且像它们一样靠得很近,那么使用它们应该是非常安全的。

这是一个非常标准的标准,这只是简单的JavaScript:

var o = data.reduce(function(m, e) {
    // There are lots of ways to do this depending on what sorts
    // of things are going to be values in `m`, we're expecting
    // the values to be non-zero numbers so a simple `!` is fine.
    if(!m[e.brand])
        m[e.brand] = 0;
    m[e.brand] += parseFloat(e.amount);
    return m;
}, { });
如果您担心石器时代的浏览器,请使用
(数据)。减少
或简单循环:

var o = { }, i;
for(i = 0; i < data.length; ++i) {
    if(!o[data[i].brand])
        o[data[i].brand] = 0;
    o[data[i].brand] += parseFloat(data[i].amount]);
}
var o={},i;
对于(i=0;i

使用浮点值应该是非常安全的,只要它们都很小,并且像它们一样靠得很近。

此解决方案首先按品牌对汽车进行分组,然后使用良好的旧reduce对数量进行求和:

var carsByBrand = _.groupBy(cars, 'brand');

var sumAmount = function(total, car){ 
    return total + parseFloat(car.amount); 
}

var sums = _.map( carsByBrand, function(cars, brand){
    return {
        brand: brand,
        amount: _.reduce(cars, sumAmount, 0)
    };
});

此解决方案首先按品牌对汽车进行分组,然后使用good old reduce将数量相加:

var carsByBrand = _.groupBy(cars, 'brand');

var sumAmount = function(total, car){ 
    return total + parseFloat(car.amount); 
}

var sums = _.map( carsByBrand, function(cars, brand){
    return {
        brand: brand,
        amount: _.reduce(cars, sumAmount, 0)
    };
});

谢谢好主意!仅当您不使用主干收集时,我才工作。=)如果
data
实际上是一个集合而不是一个数组,那么你可以使用
data.reduce(…)
。但是我得到了这个错误
Object{undefined:NaN}
请检查这个小提琴的日志,这是因为集合的
reduce
在模型上迭代,而不是在对象上:谢谢!好主意!仅当您不使用主干收集时,我才工作。=)如果
data
实际上是一个集合而不是一个数组,那么你可以使用
data.reduce(…)
。但是我得到了这个错误
Object{undefined:NaN}
请检查这个小提琴的日志,这是因为集合的
reduce
迭代模型,而不是对象: