【发布时间】:2015-09-07 08:48:42
【问题描述】:
我有这个数据结构,其中数组中的每个对象都带有一个数字——在我的例子中是一个“num”属性。那么 - 在节点中是否有一种更简单的方法(比我在下面所做的)来为每个对象计算一个数字,该数字是它之前的父数组的所有数字的值?
_ = require('underscore');
_.nst = require('underscore.nest');
var data = [
{'name' : 'name 1', 'num' : 40},
{'name' : 'name 1', 'num' : 20},
{'name' : 'name 2', 'num' : 10},
{'name' : 'name 2', 'num' : 50},
{'name' : 'name 2', 'num' : 40},
{'name' : 'name 2', 'num' : 70},
{'name' : 'name 2', 'num' : 30}
];
这给了我一个包含 2 个数组的数组
var obj = _.chain(data)
.groupBy('name')
.map(function ( value) {
return _.sortBy(value, 'num');
}).value();
除了在另一个循环(每个)内的长 for 循环之外,还有更简单的方法吗?.. 对于每个对象,我需要获取它之前的对象的总值,或者在以下情况下为 0第一个对象?...
_.each(obj, function(value){
//loop through each array in obj
for(var i=0; i<value.length; i++){
if (i !== 0 && i > 1) {
value[i].basis = value[i].num + value[i-1].basis;
} else if (i === 1) {
value[i].basis = value[i].num + value[i-1].num;
} else {
value[i].basis = 0;
}
}
});
console.log(obj);
...得到这个:
【问题讨论】:
-
输出中每个名称的第一个数字似乎是错误的。无论如何,如果您更改保存值的数据结构,则最容易改进。数据从何而来?