我有一个像这样的数组。
const cars = [
{year: "2003", made: "BMW"},
{year: "2004", made: "Honda"},
{year: "2005", made: "BMW"},
{year: "2006", made: "BMW"},
{year: "2006", made: "Mercedes"},
{year: "2007", made: "BMW"},
{year: "2008", made: "Mercedes"},
{year: "2009", made: "Mercedes"},
];
预期输出:
const output = [
[
{year: "2003", made: "BMW"},
],
[
{year: "2004", made: "Honda"},
],
[
{year: "2005", made: "BMW"},
{year: "2006", made: "BMW"},
],
[
{year: "2006", made: "Mercedes"},
],
[
{year: "2007", made: "BMW"},
].
[
{year: "2008", made: "Mercedes"},
{year: "2009", made: "Mercedes"},
],
];
我希望以上代码段中的要求已经明确。主要思想是根据键的匹配值从现有数据创建数组对象或多维数组。在上面的示例中,made
键被过滤。
答案 0 :(得分:0)
使用reduce
并检查先前制作的内容是否等于当前制作的内容,然后将其添加到相同的索引中,否则将其压入结果
const cars = [
{year: '2003', made: 'BMW'},
{year: '2004', made: 'Honda'},
{year: '2005', made: 'BMW'},
{year: '2006', made: 'BMW'},
{year: '2006', made: 'Mercedes'},
{year: '2007', made: 'BMW'},
{year: '2008', made: 'Mercedes'},
{year: '2009', made: 'Mercedes'},
];
let carsResult = [];
cars.reduce((prev, curr) => {
if (curr.made != prev.made) {
carsResult.push([curr])
} else {
carsResult[carsResult.length - 1].push(curr)
}
return curr
}, {})
console.log(carsResult)