假设我们有一个包含一些年和周数据的对象数组,如下所示:
const arr = [ {year: 2017, week: 45}, {year: 2017, week: 46}, {year: 2017, week: 47}, {year: 2017, week: 48}, {year: 2017, week: 50}, {year: 2017, week: 52}, {year: 2018, week: 1}, {year: 2018, week: 2}, {year: 2018, week: 5} ];
我们需要编写一个包含一个这样的数组的JavaScript函数。该函数应返回一个新数组,在该数组中,所有对“ year”属性具有相同值的对象都被分组到一个单独的对象中。
因此,上述数组的输出对象应类似于-
[ { 2017 : [{ week: 45, week: 46, week: 47, week: 48, week: 50, week: 53 }, { 2018 : [{ week: 1, week: 2, week: 5 }] ]
为此的代码将是-
const arr = [ {year: 2017, week: 45}, {year: 2017, week: 46}, {year: 2017, week: 47}, {year: 2017, week: 48}, {year: 2017, week: 50}, {year: 2017, week: 52}, {year: 2018, week: 1}, {year: 2018, week: 2}, {year: 2018, week: 5} ]; const groupByYear = arr => { const res = []; const map = {}; arr.forEach(item => { const temp = {}; if (!map[item.year]) { map[item.year] = []; temp[item.year] = map[item.year]; res.push(temp); }; map[item.year].push({ value: item.week }); }); return res; }; console.log(JSON.stringify(groupByYear(arr), undefined, 4));
输出结果
控制台中的输出-
[ { "2017": [ { "value": 45 }, { "value": 46 }, { "value": 47 }, { "value": 48 }, { "value": 50 }, { "value": 52 } ] }, { "2018": [ { "value": 1 }, { "value": 2 }, { "value": 5 } ] } ]