javascript - 如何通过更改参数名称来使用组更改数组对象格式?
问题描述
我最近开始使用 Javascript,并且对于下面的场景应该如何工作有点坚持。我已经经历了几个例子,但无法弄清楚。
const mobiles = [
{
BRAND_NAME: 'Samsung',
MODEL_NAME: 'Galaxy Note 9',
MANUFACTURE_DATE: '2021-11-02'
},
{
BRAND_NAME: 'Samsung',
MODEL_NAME: 'Galaxy S10',
MANUFACTURE_DATE: '2021-10-02'
},
{
BRAND_NAME: 'Apple',
MODEL_NAME: 'Iphone X',
MANUFACTURE_DATE: '2020-11-02'
}
];
我必须按品牌名称转换上述数组对象和组。输出应如下所示 -
[{
"brandname" : 'Samsung',
"details" : [{
modelname: 'Galaxy Note 9",
manufacturedate: '2021-11-02'
},
{
modelname: 'Galaxy S10'
manufacturedate: '2021-10-02'
}]
},
{
"brandname" : 'Apple',
"details" : [{
modelname: 'IPhone X",
manufacturedate: '2020-11-02'
}]
}
]
我四处搜索,发现了各种文章,他们说如果你想要一个新的 Array 对象就使用 map 。我很困惑如何去做以及是否使用 map、reduce 或任何其他功能。
任何建议如何去做?
解决方案
您可以使用Array#reduce
对象来存储每个品牌的模型。要重命名属性,您可以映射每个对象的条目并将其转换回具有Object.fromEntries
.
const mobiles = [
{
BRAND_NAME: 'Samsung',
MODEL_NAME: 'Galaxy Note 9',
MANUFACTURE_DATE: '2021-11-02'
},
{
BRAND_NAME: 'Samsung',
MODEL_NAME: 'Galaxy S10',
MANUFACTURE_DATE: '2021-10-02'
},
{
BRAND_NAME: 'Apple',
MODEL_NAME: 'Iphone X',
MANUFACTURE_DATE: '2020-11-02'
}
];
const res = Object.values(mobiles.reduce((acc, {BRAND_NAME, ...rest})=>{
(acc[BRAND_NAME] ??= {brandname: BRAND_NAME, details: []}).details.push(
Object.fromEntries(Object.entries(rest)
.map(([k,v])=>[k.toLowerCase().replace('_', ''), v])));
return acc;
}, {}));
console.log(res);
推荐阅读
- html - 如何在 HTML 中调用除 (click)="method()" 之外的方法
- java - 如何在 Firebase 中更改未知父级的子级值 - Android
- python - 当 python 程序由 shell 脚本运行时,如何调试它?
- android - 找不到满足版本约束的“androidx.arch.core:core-common”版本
- dll - 使用 ilmerge 命令提示符将 exe 与 dll 合并后,从 exe 开始
- c# - 如何统一使用简单 JSON 从数组数组中获取图像 URL?
- unity3d - 遮挡剔除和遮挡处理有什么区别?
- javascript - 有没有办法从持续更新的文件中读取仅在 nodejs 中的新更新
- java - IntelliJ 中最常用的字符串
- mysql-workbench - mysql工作台没有与aws aurora serverless mysql连接