我有这样的数据结构,其中数组中的每个对象都带有一个数字 - a" 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);
...得到这个:
答案 0 :(得分:0)
这是使用reduce的解决方案。 (当涉及在循环中累积值时,reduce通常是个好主意。)
_.each(obj, function(subArr){
_.reduce(subArr, function(total, currentObj) {
return currentObj.basis = (total += currentObj.num);
}, 0);
});
我确信有更聪明的解决方案,但是对于子阵列我不认为你可以在不使用forEach的情况下逃脱,至少不会让事情变得不必要的复杂。