假设我有一个像这样的对象数组:
const array = [
{ year: 1971, temp1: 9.5, temp2: 8.0, temp3: 9.5 },
{ year: 1972, temp1: 15.0, temp2: 3.7, temp3: 94.3 },
...
{ year: 1999, temp1: 12.0, temp2: 31.0, temp3: 24.0 }
];
如何将这个数组分为三个具有以下键值对的数组(所有对象都具有“ year”键值对,但每个数组具有不同的“ temp”对):
const array1 = [ { year: 1971, temp1: 9.5}, { year: 1972, temp1: 15.0 } ... { year: 1999, temp1: 12.0 } ];
const array2 = [ { year: 1971, temp2: 8.0}, { year: 1972, temp2: 3.7 } ... { year: 1999, temp2: 31.0 } ];
const array3 = [ { year: 1971, temp3: 9.5}, { year: 1972, temp3: 94.3 } ... { year: 1999, temp3: 24.0 } ];
编辑:我一直在尝试通过遍历Object.keys和数组的行来进行尝试,但是我想出的一切都涉及遍历整个数组多次。
答案 0 :(得分:1)
一种解决方案可能是使用reduce(),并在化简的每一步上遍历object.keys()时,您决定在哪个数组上放置格式为{year, temp}
的新生成的对象:
const array = [
{year: 1971, temp1: 9.5, temp2: 8.0, temp3: 9.5},
{year: 1972, temp1: 15.0, temp2: 3.7, temp3: 94.3},
{year: 1999, temp1: 12.0, temp2: 31.0, temp3: 24.0}
];
let res = array.reduce((acc, curr) =>
{
Object.keys(curr).forEach((k, j) =>
{
if (j > 0)
{
acc[j - 1] = acc[j - 1] || [];
acc[j - 1].push({year: curr.year, [k]: curr[k]});
}
});
return acc;
}, []);
console.log(res);