gpt4 book ai didi

javascript - 通过以特定顺序使用对象源数组中的属性进行分组来形成数组

转载 作者:行者123 更新时间:2023-12-04 10:57:02 31 4
gpt4 key购买 nike

我有一组具有以下结构的对象作为响应发送:


let sampleData = [
{ values: { High: 4, Low: 5, Medium: 7 } , time: "1571372233234" , sum: 16 },
{ values: { High: 5, Low: 3, Medium : 1 }, time: "1571372233234" , sum: 9},
{ time: "14354545454", sum: 0},
{ time: "14354545454", sum: 0} }
];



我需要获取数组内每个对象中的每个键并从中形成一个数组。基本上基于所有对象中存在的键进行分组。如果对象没有“值”,它应该在 val1、val2、val3 中返回 0。

但问题是,问题中“值”对象中键“高、低、中”的顺序是不可预测的。使用我编写的任何代码,第一个对象中存在的键将被分组并遵循该顺序。但我想要任何输入订单,它应该总是给我这个订单“高中低”订单。

生成的对象数组应该看起来像并且应该始终遵循“高中顺序”:
result = [
{ name: 'High', data: [4, 5, 0, 0] },
{ name: 'Medium', data: [5, 3, 0, 0] },
{ name: 'Low', data: [7, 1, 0, 0] }
]


我尝试了以下方法:

let sampleData = [{ values: { High: 4, Low: 5,  Medium: 7 } , time: "1571372233234" , sum: 16 },{ values: { High: 5, Low: 3, Medium : 1 }, time: "1571372233234" , sum: 9},{ time: "14354545454", sum: 0},{ time: "14354545454", sum: 0 }];

const keySet = new Set(sampleData.flatMap(a => Object.keys(a.values || {})));

const merged = sampleData.reduce((acc, {
values = {}
}) => {
keySet.forEach(name => {
acc[name] = acc[name] || {
name,
data: []
};
acc[name].data.push(values[name] || 0);
});
return acc;
}, {});

console.log(merged);

最佳答案

您可以获取结果集并迭代键和数组以获取值。

let sampleData = [{ values: { High: 4, Low: 5,  Medium: 7 }, time: "1571372233234", sum: 16 }, { values: { High: 5, Low: 3, Medium : 1 }, time: "1571372233234", sum: 9 }, { time: "14354545454", sum: 0 }, { time: "14354545454", sum: 0 }],
keys = ['High', 'Low', 'Medium'],
grouped = sampleData.reduce((r, { values = {} } = {}) => {
r.forEach(({ name, data }) => data.push(values[name] || 0));
return r;
}, keys.map(name => ({ name, data: [] })));

console.log(grouped);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 通过以特定顺序使用对象源数组中的属性进行分组来形成数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59105894/

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