javascript - 将对象数组转换为具有唯一 ID 和名称数组的另一个对象数组
问题描述
如何将此项目数组转换为结果数组(对象应具有唯一 id 并具有键“名称”,其中包含来自具有相同 id 的对象的名称属性数组):
原始数组:
const items = [
{id: 1, name: 'a'},
{id: 2, name: 'b'},
{id: 3, name: 'c'},
{id: 1, name: 'd'},
{id: 3, name: 'f'}
];
变换数组:
const result = [
{id: 1, names: ['a', 'd']},
{id: 2, names ['b']},
{id: 3, names: ['c', 'f']}
];
解决方案
您可以使用Array.reduce
来获得结果。
const inputArray = [
{id: 1, name: 'a'},
{id: 2, name: 'b'},
{id: 3, name: 'c'},
{id: 1, name: 'd'},
{id: 3, name: 'f'}
];
const result = inputArray.reduce((acc, item) => {
const exist = acc.find(e => e.id == item.id);
// check exist in result
if (exist) {
// exist: push 'name' value to 'names' array
exist['names'].push(item.name);
} else {
// not exist: create new item in result
acc.push({
'id': item.id,
'names': [item.name]
});
}
return acc;
}, []);
console.log(result);
推荐阅读
- laravel-5 - Laravel 5 getparentsTree
- jenkins - 在 k8s 容器中访问 jenkins shell 变量
- node.js - 安装 Node.js 15.5.1(最新版本)导致错误
- android - Android Studio:为什么我的图像屏幕滞后?
- mamp - Mac OS Big Sur redis.so:mach-o,但架构错误 MAMP
- javascript - 有没有一种快速的方法可以从类或类型的所有元素中删除选项卡焦点?
- macos - 无法从同一 Wi-Fi 上的其他设备访问托管在 IP 地址上的项目
- c# - 如何处理asp.net core 5中超出表单值长度限制的表单错误
- c++ - 将 std::vector 与类一起使用时的 C++ 读写问题
- reactjs - 如何删除`