我不确定我是否可以正确解释这个问题,但现在就说了。我们说我有这个:
List = {
0: {
payment: 1,
value: 10
},
1: {
payment: 2,
value: 15
},
2: {
payment: 1,
value: 12
},
3: {
payment: 2,
value: 13
}
}
如何分别总结2笔付款的价值?又名sumforpayment1= 10 +12
和sumforpayment2= 15 + 13
答案 0 :(得分:4)
您可以使用Object.keys()
和reduce()
返回包含每笔付款金额的对象。
var data = {
0: {
payment: 1,
value: 10
},
1: {
payment: 2,
value: 15
},
2: {
payment: 1,
value: 12
},
3: {
payment: 2,
value: 13
}
}
var result = Object.keys(data).reduce(function(r, e) {
var key = 'sumforpayment' + data[e].payment;
r[key] = (r[key] || 0) + data[e].value;
return r;
}, {})
console.log(result)

答案 1 :(得分:1)
我认为你需要一组对象。在这种情况下,对象是不必要的。
List = [
{
payment: 1,
value: 10
},
{
payment: 2,
value: 15
},
{
payment: 1,
value: 12
},
{
payment: 2,
value: 13
}
];
var List2 = {};
List.map(function(o) {
if(!List2['sumforpayment' + o.payment]) {
List2['sumforpayment' + o.payment] = o.value;
}
else {
List2['sumforpayment' + o.payment] += o.value;
}
});
console.log(List2);
</script>
&#13;
答案 2 :(得分:1)
这些天我喜欢这个符号迭代器,当谈到对象时。
var list = {
0: {
payment: 1,
value: 10
},
1: {
payment: 2,
value: 15
},
2: {
payment: 1,
value: 12
},
3: {
payment: 2,
value: 13
}
},
res = [];
list[Symbol.iterator] = function*(){
var oks = Object.keys(this),
payment = {1:0,2:0};
for (var key of oks) this[key].payment === 1 ? payment["1"] += this[key].value
: payment["2"] += this[key].value;
yield payment;
};
res = [...list];
console.log(res);
答案 3 :(得分:0)
首先,请修改您的JavaScript对象,因为它没有正确格式化。
属性应以逗号分隔。
您可以创建一个实用程序函数,该函数会迭代您的对象,搜索付款标识值并计算总金额。
它是如何运作的:
Object.keys()
迭代您的对象属性。payment
的值通过“selector”(paymentNumber
)
var list = {
0: {
payment: 1,
value: 10
},
1: {
payment: 2,
value: 15
},
2: {
payment: 1,
value: 12
},
3: {
payment: 2,
value: 13
}
}
var calculatePaymentSum = function(paymentNumber, data) {
var result = 0;
Object.keys(data).forEach(function(key) {
if (data[key].payment === paymentNumber) {
result += data[key].value;
}
}, this);
return result;
};
console.log('sum of payment 1 = ', calculatePaymentSum(1, list));
console.log('sum of payment 2 = ', calculatePaymentSum(2, list));