我有一个按索引分组的对象数组,想要重构并向响应添加标签。
这是我的原始数组:
let cars = [{'make': 'audi', 'model': 'RS3', 'transmition': 'automatic'}, {'make': 'audi', 'model': 'RS7', 'transmition': 'dual-clutch'}, {'make': 'bmw', 'model': '325is', 'transmition': 'manual'}, {'make': 'bmw', 'model': 'M2', 'transmition': 'dual-clutch'}]
这是用于通过make对数组进行分组的源代码:
var groupedByMake = _.groupBy(
cars,
"make"
);
响应如下所示:
{
'audi':[{'model': 'RS3', 'transmition': 'automatic'}, {'model': 'RS7', 'transmition': 'dual-clutch'}],
'bmw':[{'model': '325is', 'transmition': 'manual'}, {'model': 'M2', 'transmition': 'dual-clutch'}]
}
我想要的结果应该是这样的:
[{
'make': 'audi',
'types': [{'model': 'RS3', 'transmition': 'automatic'}, {'model': 'RS7', 'transmition': 'dual-clutch'}]
},{
'make': 'bmw',
'types': [{'model': '325is', 'transmition': 'manual'}, {'model': 'M2', 'transmition': 'dual-clutch'}]
}]
这可以使用 JavaScript 实现吗?如果是这样,我可以获得帮助来完成这项任务。
最佳答案
您可以使用array.reduce将一个数组转换为另一个数组并控制是返回新元素还是在现有数组中累积值 (prev
):
let cars = [{'make': 'audi', 'model': 'RS3', 'transmition': 'automatic'}, {'make': 'audi', 'model': 'RS7', 'transmition': 'dual-clutch'}, {'make': 'bmw', 'model': '325is', 'transmition': 'manual'}, {'make': 'bmw', 'model': 'M2', 'transmition': 'dual-clutch'}];
let output = cars.reduce((acc, cur) => {
let {make, ...obj} = cur;
let prev = acc.find(x => x.make === make);
if(!prev) {
acc.push({make,types:[obj]})
} else {
prev.types.push(obj);
}
return acc;
}, []);
console.log(output);
关于javascript - 如何在 JavaScript 中为对象值添加标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71076394/