Underscore.js 某些对象所有方法的总和
Underscore.js Sum of all methods of some objects
有没有简单的方法求和对象方法。
var obj = {
a: {
aa: 12,
bb: 4
},
b: {
aa: 5,
bb: 100
},
c: {
aa: 1,
bb: 150
}
}
我需要将所有 'aa' 和 'bb' 加在一起。
应该是这样的
var res = {
aa: 18,
bb: 254
}
使用_.reduce
_.reduce(obj, function(total, element) {
total.aa = total.aa + element.aa;
total.bb = total.bb + element.bb;
return total;
}, { aa: 0, bb: 0})
试试这个
var obj = {
a: {
aa: 12,
bb: 4
},
b: {
aa: 5,
bb: 100
},
c: {
aa: 1,
bb: 150
}
};
var result = _.chain(obj)
.values()
.reduce(function (c, p) {
return _.mapObject(c, function (value, key) {
return p[key] + value;
});
})
.value();
console.log(result);
<script src="//jashkenas.github.io/underscore/underscore-min.js"></script>
有几种方法可以做到这一点:
使用两个循环:
var obj = {
a: {
aa: 12,
bb: 4
},
b: {
aa: 5,
bb: 100
},
c: {
aa: 1,
bb: 150
}
};
var result = {};
_.each(obj, function(chd) {
_.each(chd, function(val, key) {
result[key] = (result[key] || 0) + val;
} );
} );
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
这是一种解决方案:
var res = _.reduce(obj, function(sum, o) {
sum.aa += o.aa;
sum.bb += o.bb;
return sum;
});
_.reduce(obj, function(total, element) {
return {
aa: total.aa + element.aa,
bb: total.bb + element.bb
};
}, { aa: 0, bb: 0});
有没有简单的方法求和对象方法。
var obj = {
a: {
aa: 12,
bb: 4
},
b: {
aa: 5,
bb: 100
},
c: {
aa: 1,
bb: 150
}
}
我需要将所有 'aa' 和 'bb' 加在一起。 应该是这样的
var res = {
aa: 18,
bb: 254
}
使用_.reduce
_.reduce(obj, function(total, element) {
total.aa = total.aa + element.aa;
total.bb = total.bb + element.bb;
return total;
}, { aa: 0, bb: 0})
试试这个
var obj = {
a: {
aa: 12,
bb: 4
},
b: {
aa: 5,
bb: 100
},
c: {
aa: 1,
bb: 150
}
};
var result = _.chain(obj)
.values()
.reduce(function (c, p) {
return _.mapObject(c, function (value, key) {
return p[key] + value;
});
})
.value();
console.log(result);
<script src="//jashkenas.github.io/underscore/underscore-min.js"></script>
有几种方法可以做到这一点: 使用两个循环:
var obj = {
a: {
aa: 12,
bb: 4
},
b: {
aa: 5,
bb: 100
},
c: {
aa: 1,
bb: 150
}
};
var result = {};
_.each(obj, function(chd) {
_.each(chd, function(val, key) {
result[key] = (result[key] || 0) + val;
} );
} );
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
这是一种解决方案:
var res = _.reduce(obj, function(sum, o) {
sum.aa += o.aa;
sum.bb += o.bb;
return sum;
});
_.reduce(obj, function(total, element) {
return {
aa: total.aa + element.aa,
bb: total.bb + element.bb
};
}, { aa: 0, bb: 0});