JavaScript:值为数组的对象转键值对数组时,如何用原键名替代数组索引
现有代码的问题
- 你对每个键对应的数组做了展开运算,JS 展开数组生成新对象时,只会把数组的可枚举数字索引作为对象的属性键(数组的
length属性是不可枚举的,所以不会出现在生成的对象里),因此最终才会生成{0: "22"}这类带索引键的结构 - 整个构造新对象的过程里,完全没有把循环拿到的原键名(比如
Cost One、Cost Two)用到新对象的属性上,等于把最该保留的字段名给丢掉了
修改方法
不需要对原数组做展开,只要在每一轮循环中,把当前遍历到的原键名作为新对象的属性键,值直接取数组的第一个元素即可。
修改后的循环代码:
const mappedDataArray = []; for (const key in costsFormValues) { const mappedData = { [key]: costsFormValues[key][0] }; mappedDataArray.push(mappedData); }
如果不想手动维护空数组和push逻辑,也可以用Object.entries结合数组map方法实现更简洁的版本,效果完全一致:
const mappedDataArray = Object.entries(costsFormValues).map(([key, arr]) => ({ [key]: arr[0] }));
运行以上代码,就能直接得到预期的输出结构:
[{Cost One: "22"}, {Cost Two: "33"}, {Cost Five: "1456"}]
内容的提问来源于stack exchange,提问作者deepak murthy
相关产品推荐
相关产品推荐

