javascript - 将数组数组转换为组合在一起的对象数组
问题描述
我有一个数组数组。如何将它们转换为组合在一起的对象数组?
var abc = [
['apple', 'fruit'], ['banana', 'fruit'], ['grapes', 'fruit'], ['red', 'color'], ['blue', 'color'], ['black', 'color']
]
abc = abc.map(function(item) {
return {
value: item[0],
color: item[1]
}
})
colors = abc.filter(function(item) {
return item.color === 'color'
})
fruits = abc.filter(function(item) {
return item.color === 'fruit'
})
var result = [{
group: 'color',
value: colors.map(function(item) {
return item.value
})
}, {
group: 'fruit',
value: fruits.map(function(item) {
return item.value
})
}]
console.log(result)
我的预期输出是:
var abc = [
{
group: 'color',
value: ['red', 'blue', 'black']
},
{
group: 'fruit',
value: ['apple', 'banana', 'grapes']
}]
有没有更简单的方法来实现这一点?
我也可以使用 lodash。请指教。
解决方案
这是一种使用reduce
and的方法map
。通过映射到值数组来reduce
执行聚合。并将此分组转换为所需的格式作为对象数组。group
Object.entries()
map
var abc = [
['apple', 'fruit'],
['banana', 'fruit'],
['grapes', 'fruit'],
['red', 'color'],
['blue', 'color'],
['black', 'color']
];
const result = Object.entries(
abc.reduce((a, e) => {
if (!(e[1] in a)) {
a[e[1]] = [];
}
a[e[1]].push(e[0]);
return a;
}, {})
).map(e => ({group: e[0], value: e[1]}))
;
console.log(result);
推荐阅读
- php - 如何在 Codeigniter 4 控制器中使电子邮件字段可选
- css - CSS nth-chid 选择器没有隐藏的冷节点
- python - tkinter中的PNG图像透明度
- node.js - Electron App 打包后没有运行
- python-3.x - pyautogui 不在文本字段中写入 Excel 单元格内容
- python - 我似乎无法在 python 3 中找到数字的最高素数的正确代码
- javafx - 在按钮上显示“stage2”后如何隐藏“stage1”单击[JavaFX]
- laravel - Laravel 在路由中使用数据库变量
- java - Apache Pulsar:订阅时检查/获取分区元数据时出错
- asp.net - 如何在asp.net mvc的url中添加页面标题?