我有这样的数据结构,数组中的每个对象都带有一个数字--在我的例子中是一个"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();除了在另一个循环(每个循环)中的一个长循环(每个循环)之外,还有更简单的方法来完成这个任务吗?对于每个对象,我需要得到它之前的对象的总值,或者在第一个对象的情况下为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);...to得到了以下信息:

发布于 2015-06-22 02:29:19
这里有一个使用reduce的解决方案。(当涉及到在循环中积累一个值时,减少常常是一个好主意。)
_.each(obj, function(subArr){
_.reduce(subArr, function(total, currentObj) {
return currentObj.basis = (total += currentObj.num);
}, 0);
});我确信有更聪明的解决方案,但是对于子数组,我认为不使用forEach是无法逃脱的,至少在没有不必要的复杂的情况下是不可能的。
https://stackoverflow.com/questions/30970846
复制相似问题