如何有效地从对象数组转换数据
How to convert data from Array of Objects efficiently
我正在从我的 API
中获取一组这样的对象
[
{
[...]
time: "2022-01-27T18:21Z",
attributes: {
[...]
temp1: 12,
temp2: 49,
[...],
tempN: 23
[...]
},
[...]
},
{
[...]
time: "2022-01-27T18:26Z",
attributes: {
[...]
temp1: 13,
temp2: 49,
[...],
tempN: 22
[...]
},
[...]
},
[...]
]
我需要将它们转换成这样的对象:
{
temp1: [
["2022-01-27T18:21Z", 12], ["2022-01-27T18:26Z", 13], [...]
],
temp2: [
["2022-01-27T18:21Z", 49], ["2022-01-27T18:26Z", 49], [...]
],
[...]
tempN: [
["2022-01-27T18:21Z", 23], ["2022-01-27T18:26Z", 22], [...]
]
}
我不知道原始数据集中如何或什至是否存在任何 temp
值。 API 数据中的一个对象可能有例如 temp5
,但下一个对象没有。数据集至少有几百到几千个对象。
转换数据集的有效方法是什么?
我想我会像 groupBy 那样临时处理...
const data = [{
time: "2022-01-27T18:21Z",
attributes: {
temp1: 12,
temp2: 49,
tempN: 23
},
},
{
time: "2022-01-27T18:26Z",
attributes: {
temp1: 13,
temp2: 49,
tempN: 22
},
},
]
const byTemps = data.reduce((acc, el) => {
let temps = Object.keys(el.attributes).filter(key => key.startsWith('temp'));
temps.forEach(temp => {
if (!acc[temp]) acc[temp] = [];
acc[temp].push([el.time, el.attributes[temp]]);
});
return acc;
}, {});
console.log(byTemps)
我正在从我的 API
中获取一组这样的对象[
{
[...]
time: "2022-01-27T18:21Z",
attributes: {
[...]
temp1: 12,
temp2: 49,
[...],
tempN: 23
[...]
},
[...]
},
{
[...]
time: "2022-01-27T18:26Z",
attributes: {
[...]
temp1: 13,
temp2: 49,
[...],
tempN: 22
[...]
},
[...]
},
[...]
]
我需要将它们转换成这样的对象:
{
temp1: [
["2022-01-27T18:21Z", 12], ["2022-01-27T18:26Z", 13], [...]
],
temp2: [
["2022-01-27T18:21Z", 49], ["2022-01-27T18:26Z", 49], [...]
],
[...]
tempN: [
["2022-01-27T18:21Z", 23], ["2022-01-27T18:26Z", 22], [...]
]
}
我不知道原始数据集中如何或什至是否存在任何 temp
值。 API 数据中的一个对象可能有例如 temp5
,但下一个对象没有。数据集至少有几百到几千个对象。
转换数据集的有效方法是什么?
我想我会像 groupBy 那样临时处理...
const data = [{
time: "2022-01-27T18:21Z",
attributes: {
temp1: 12,
temp2: 49,
tempN: 23
},
},
{
time: "2022-01-27T18:26Z",
attributes: {
temp1: 13,
temp2: 49,
tempN: 22
},
},
]
const byTemps = data.reduce((acc, el) => {
let temps = Object.keys(el.attributes).filter(key => key.startsWith('temp'));
temps.forEach(temp => {
if (!acc[temp]) acc[temp] = [];
acc[temp].push([el.time, el.attributes[temp]]);
});
return acc;
}, {});
console.log(byTemps)