gpt4 book ai didi

javascript - "pivoting"多维数组时避免嵌套映射

转载 作者:行者123 更新时间:2023-11-30 07:54:16 24 4
gpt4 key购买 nike

我有格式的数据

[
{
"timeline_map": {
"2017-05-06": 770,
"2017-05-07": 760,
"2017-05-08": 1250
...
}
},
{
"timeline_map": {
"2017-05-06": 590,
"2017-05-07": 210,
"2017-05-08": 300
...
}
},
{
"timeline_map": {
"2017-05-06": 890,
"2017-05-07": 2200,
"2017-05-08": 1032
...
}
}
]

为了在谷歌图表中使用,我需要更改格式

[
["2017-05-06", 770, 590, 890, ...],
["2017-05-07", 760, 210, 2200, ...],
["2017-05-08", 1250, 300, 1032, ...]
]

我写了以下内容来进行转换

let mapped = _.map(
chartData.results[0].timeline_map, (timestampVal, timestampKey) => (
[timestampKey].concat(
_.map(
chartData.results, lineData => (
lineData.timeline_map[timestampKey]
)
)
)
)
)

这行得通,但我认为嵌套 map 不是一个好主意,因为它会增加循环量,增加被映射数组长度的平方。这里有没有更好的方法可以达到预期的效果。

JSBIN

最佳答案

您可以在哈希表上使用闭包,并将相应的值分配给日期键。

var data = [{ timeline_map: { "2017-05-06": 770, "2017-05-07": 760, "2017-05-08": 1250 } }, { timeline_map: { "2017-05-06": 590, "2017-05-07": 210, "2017-05-08": 300 } }, { timeline_map: { "2017-05-06": 890, "2017-05-07": 2200, "2017-05-08": 1032 } }],
grouped = data.reduce(function (hash) {
return function (r, o) {
Object.keys(o.timeline_map).forEach(function (k) {
if (!hash[k]) {
hash[k] = [k];
r.push(hash[k]);
}
hash[k].push(o.timeline_map[k]);
});
return r;
};
}(Object.create(null)), []);

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

关于javascript - "pivoting"多维数组时避免嵌套映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44398218/

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