JavaScript如何将字符串数组转换为带指定键的对象数组
JS字符串数组转预定义键对象数组实现方案
问题背景
你需要将固定顺序的字符串数组,转换为指定键组成的单个对象构成的数组,字符串顺序和键的顺序一一对应。
现有输入数组示例:
let arr =[ '612772d3d8b2b2000482fc3c', '15', '15', 'Basketball', '2021' ]
预期输出格式:
let result= [{ id: '612772d3d8b2b2000482fc3c', amount: '15', bet: '15', sport: 'Basketball', date: '2021'}]
原代码错误原因
你使用的Array.map会遍历输入数组的每一个元素,为每个元素都生成一个完整对象,最终会得到5个对象,且每个对象所有属性都被赋值为当前遍历的元素值,自然不符合预期。
正确实现方式
方案1:新手友好的遍历赋值
先定义和数组顺序一一对应的键列表,再逐个匹配赋值:
// 按顺序定义预定义键 const keys = ['id', 'amount', 'bet', 'sport', 'date'] const inputArr = [ '612772d3d8b2b2000482fc3c', '15', '15', 'Basketball', '2021' ] const result = [{}] // 按索引匹配键和对应值 keys.forEach((key, index) => { result[0][key] = inputArr[index] ?? '' // 空值兜底,避免出现undefined }) console.log(result)
方案2:简化写法
使用Object.fromEntries快速组装对象:
const keys = ['id', 'amount', 'bet', 'sport', 'date'] const inputArr = [ '612772d3d8b2b2000482fc3c', '15', '15', 'Basketball', '2021' ] const result = [Object.fromEntries(keys.map((key, i) => [key, inputArr[i] ?? '']))] console.log(result)
两种方案都可以得到你需要的输出结果。
适配变长数组的扩展逻辑
如果字符串数组长度不固定,可以按实际长度匹配,超出键数量的字符串可以选择忽略,或者新增自定义键存储即可。
内容的提问来源于stack exchange,提问作者egx
相关产品推荐
相关产品推荐

