gpt4 book ai didi

javascript - 如何在 es6 中编写更好的代码以使用数组值格式化对象

转载 作者:行者123 更新时间:2023-11-30 19:52:04 25 4
gpt4 key购买 nike

我想使用 map 函数获得更好的解决方案以获得相同的预期结果。

我正在为带有条值的图表格式化 chartJs 对象。

但我使用的是 es5 语法的旧方法,我想使用 es6 语法实现相同的效果。

我尝试使用 es5 语法,例如 for..in 循环来获得所需的结果。

var graphData = [
{org: 1234, dpt1: 1500, dpt2: 900, dpt3: 107},
{org: 123, dpt1: 1500, dpt2: 900, dpt3: 1373},
{org: 123, dpt1: 1500, dpt2: 900,dpt3: 946},
{org: 34634634, dpt1: 1500, dpt2: 900, dpt3: 715},
{org: 123123, dpt1: 1500, dpt2: 900, dpt3: 276}
];

实际数据将被解析为一个对象,其中包含来自所有对象的键和值

var graphdataObj = {}; 
graphData.forEach(function(elem) {
for (var key in elem) {
if (graphdataObj[key]) {
graphdataObj[key].push(elem[key]);
} else {
graphdataObj[key] = [];
graphdataObj[key].push(elem[key]);
}
};
});

解析/结果对象==> graphdataObj

graphdataObj = {
dpt1: [1500, 1500, 1500, 1500, 1500]
dpt2: [900, 900, 900, 900, 900]
dpt3: [107, 1373, 946, 715, 276]
org: [1234, 123, 123, 34634634, 123123]
};

我想使用 es6 语法获得相同的结果,以获得比这更好的解决方案,而无需在 forEach 中使用 for .. in 循环

最佳答案

我将使用 reduce 并遍历 graphData 的每个项目的 Object.entries,在中的键处创建一个数组值累加器,如果它尚不存在,则推送到该数组:

const graphData = [
{org: 1234, dpt1: 1500, dpt2: 900, dpt3: 107},
{org: 123, dpt1: 1500, dpt2: 900, dpt3: 1373},
{org: 123, dpt1: 1500, dpt2: 900,dpt3: 946},
{org: 34634634, dpt1: 1500, dpt2: 900, dpt3: 715},
{org: 123123, dpt1: 1500, dpt2: 900, dpt3: 276}
];

const graphdataObj = graphData.reduce((a, obj) => {
Object.entries(obj).forEach(([key, val]) => {
if (!a[key]) a[key] = [];
a[key].push(val);
});
return a;
}, {});

console.log(graphdataObj);

请注意 forEach 仍在使用,在 .reduce 中(但 forEach 最合适的数组出于副作用的目的对数组进行通用迭代的方法 - 在这一点上,没有比 forEach 更合适的方法了,所以不用担心。

关于javascript - 如何在 es6 中编写更好的代码以使用数组值格式化对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54374638/

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