gpt4 book ai didi

javascript - 如何减少对象数组并避免覆盖字符串属性值并仅对整数值求和?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:42:23 24 4
gpt4 key购买 nike

我有一个按不同类别分组的数组,每个类别嵌套了更多具有不同值(数字和字符串)的对象,我必须减少这些对象(字符串除外)。 Reduce 可以很好地处理数值,将它们相加,但它会覆盖字符串值,只保留最后一个。

我正在尝试按类别减少对象/字典,并用每个类别的单位总和填充表格,但如果子类别和名称不同,则不对它们求和。

这是一个演示:

var data = {
'Category xxxx': [
{
units: 1234,
subcategory: 'wolves',
name: 'Starks'
},
{
units: 1345354,
subcategory: 'wolves',
name: 'Starks'
},
{
units: 666,
subcategory: 'dragons',
name: 'Targaryens'
}
],
'Category yyyy': [
{
units: 7783,
subcategory: 'lions',
name: 'Lanisters'
},
{
units: 1267878,
subcategory: 'spires',
name: 'Martells'
}
]
}

var test = _.map(data, function (value, key) {
var returnedData = {
Category: key,
units: _(value).reduce(function (memo, metrics) {
return memo + metrics.units;
}, 0),
subcategory: _(value).reduce(function (memo, metrics) {
return metrics.subcategory;
}, 0),
name: _(value).reduce(function (memo, metrics) {
return metrics.name;
}, 0),
};
return returnedData;
});

console.log(test)
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

单位(整数)加起来很好,但字符串被最后迭代的字符串属性覆盖。

我想获得这样的结果,如果字符串不同,则整数不会相加。

returnedData = {
'Category xxxx': [
{
units: 1346588,
chivalry: 'wolves',
name: 'Starks'
},
{
units: 666,
subcategory: 'dragons',
name: 'Targaryens'
}
],
'Category yyyy': [
{
clicks: 7783,
subcategory: 'lions',
name: 'Lanisters'
},
{
clicks: 1267878,
subcategory: 'spires',
name: 'Martells'
}
]
}

最好的方法是什么?

最佳答案

最后,这个提议使用一个对象作为对 result 对象的项目的引用。

如果没有可用的 result 对象,则它会创建一个具有所需类别的新对象。对于子类别,它生成一个元素,该元素被推送到结果数组。

计数使用 hash 维护,作为对 result 元素的引用。

var data = { 'Category xxxx': [{ clicks: 1234, subcategory: 'dogs', name: 'jhon doe' }, { clicks: 1345354, subcategory: 'dogs', name: 'jhon doe' }], 'Category yyyy': [{ clicks: 7783, subcategory: 'frogs', name: 'lanisters' }, { clicks: 1267878, subcategory: 'rats', name: 'perry' }] },
result = {};

Object.keys(data).forEach(function (k) {
var hash = Object.create(null);
if (!result[k]) {
result[k] = [];
}
data[k].forEach(function (a) {
if (!hash[a.subcategory]) {
hash[a.subcategory] = { clicks: 0, subcategory: a.subcategory, name: a.name };
result[k].push(hash[a.subcategory]);
}
hash[a.subcategory].clicks += a.clicks;
});
});

console.log(result);

关于javascript - 如何减少对象数组并避免覆盖字符串属性值并仅对整数值求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37941029/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com