我试图总结出现在如下构造的对象数组中的值:
[
{ token: 'N97235', conversions: '2', payout: '100' },
{ token: 'N91567', conversions: '2', payout: '100' },
{ token: 'N91567', conversions: '3', payout: '150' },
{ token: 'N97759', conversions: '2', payout: '100' },
{ token: 'N97240', conversions: '1', payout: '50' },
{ token: 'N13925', conversions: '1', payout: '50' },
{ token: 'N53285', conversions: '1', payout: '50' },
{ token: 'N28312', conversions: '1', payout: '100' },
{ token: 'N96475', conversions: '1', payout: '50' },
{ token: 'N97759', conversions: '2', payout: '100' },
{ token: 'N76951', conversions: '1', payout: '100' },
{ token: 'N39108', conversions: '1', payout: '50' },
{ token: 'N39108', conversions: '4', payout: '200' },
{ token: 'N48854', conversions: '2', payout: '100' },
{ token: 'N50179', conversions: '1', payout: '50' },
{ token: 'N18804', conversions: '1', payout: '50' },
{ token: 'N95631', conversions: '2', payout: '100' },
]我的意思是,我想把所有的转换和支出相加到一个新的对象中,如下所示
{
N97235: { conversions: 2, payout: 100 },
N39108: { conversions: 5, payout: 250 },
N91567: { conversions: 6, payout: 300},
N96475: { conversions: 1, payout: 50},
// ..and so on
}正如您所看到的,它在原始数组中找到了重复的“条目”,并将它们的转换和支出相加到一个新对象中(单个条目也在其中)。我试图做的是遍历这个数组(在本例中是tokens_array[]),并将其‘objects’属性附加到新创建的对象( conversions_sum{} one),但问题是在向其添加任何内容之前,首先对其值进行“空化”。
tokens_array.forEach(function(element) {
var token_string = element.token.toString();
conversions_sum[token_string] = {};
conversions_sum[token_string].conversions += element.conversions;
conversions_sum[token_string].payout += element.payout;
});但是,由于conversions_sumtoken_string.conversions和conversions_sumtoken_string.payout从一开始就没有初始化--它将这个数字添加到“未定义”中。
提前谢谢。
发布于 2017-02-21 00:27:07
您可以使用Array.prototype.reduce创建令牌的散列对象,如下所示:
function group(arr) {
return arr.reduce(function(h, e) { // for each object e in arr
if(h[e.token]) { // if we already hashed the object
h[e.token].conversions += +e.conversions; // add e's conversions to the hashed object (implicitly convert e.conversions into a number using unary +)
h[e.token].payout += +e.payout; // add e's payout to the hashed object as well
}
else { // if not, then create a new object initialized with e's values
h[e.token] = {conversions: +e.conversions, payout: +e.payout};
}
return h;
}, {});
}
var array = [
{ token: 'N97235', conversions: '2', payout: '100' },
{ token: 'N91567', conversions: '2', payout: '100' },
{ token: 'N91567', conversions: '3', payout: '150' },
{ token: 'N97759', conversions: '2', payout: '100' },
{ token: 'N97240', conversions: '1', payout: '50' },
{ token: 'N13925', conversions: '1', payout: '50' },
{ token: 'N53285', conversions: '1', payout: '50' },
{ token: 'N28312', conversions: '1', payout: '100' },
{ token: 'N96475', conversions: '1', payout: '50' },
{ token: 'N97759', conversions: '2', payout: '100' },
{ token: 'N76951', conversions: '1', payout: '100' },
{ token: 'N39108', conversions: '1', payout: '50' },
{ token: 'N39108', conversions: '4', payout: '200' },
{ token: 'N48854', conversions: '2', payout: '100' },
{ token: 'N50179', conversions: '1', payout: '50' },
{ token: 'N18804', conversions: '1', payout: '50' },
{ token: 'N95631', conversions: '2', payout: '100' },
];
console.log(group(array));
发布于 2017-02-21 00:22:03
那么,初始化它们,对吗?您也每次都要重写新对象,但只希望在不存在新对象时覆盖它。就像这样:
conversions_sum[token_string] = conversions_sum[token_string] || {
conversions: 0,
payout: 0
};
conversions_sum[token_string].conversions += parseInt(element.conversions, 10);
conversions_sum[token_string].payout += parseInt(element.payout, 10);https://stackoverflow.com/questions/42356507
复制相似问题