如何将对象数组转换为以元素value为键、label为值的普通对象
需求可行性结论
该需求完全可以实现。你之前使用Object.entries未达到预期,是因为方法选型错误:Object.entries的作用是将现有对象转换为[键, 值]结构的二维数组,和当前「从对象数组组装新对象」的处理方向完全相反。
具体实现方案
下面是3种可直接运行的实现写法,最终输出结果完全匹配你的预期:
- 简洁写法(推荐,现代JS原生支持)
搭配Array.map把原数组元素转换为[value值, label值]的键值对数组,再用Object.fromEntries直接转成目标对象:
const hello = [ { label: 'one', value: 'Tangerinefeed' }, { label: 'two', value: 'dryexamfeed' }, { label: 'three', value: 'wetfeed' }, { label: 'forth', value: 'sawdust' }, { label: 'five', value: 'etc' }, ]; const answer = Object.fromEntries(hello.map(item => [item.value, item.label]));
- 兼容写法(适配不支持
Object.fromEntries的老旧环境)
用Array.reduce遍历数组,逐一向空对象中追加键值对:
const answer = hello.reduce((acc, cur) => { acc[cur.value] = cur.label; return acc; }, {});
- 基础写法(无API理解成本)
直接声明空对象,通过循环逐个赋值:
const answer = {}; hello.forEach(item => { answer[item.value] = item.label; });
注意:如果
hello数组中存在多个元素的value字段值重复,后遍历到的元素的label值会覆盖前面同键的取值。
内容的提问来源于stack exchange,提问作者user15322469
相关产品推荐
相关产品推荐

