使用对象键将对象的javascript数组划分为多个数组

时间:2019-02-15 05:34:20

标签: javascript arrays ecmascript-6

假设我有一个像这样的对象数组:

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和数组的行来进行尝试,但是我想出的一切都涉及遍历整个数组多次。

1 个答案:

答案 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);