为什么这段使用map和for循环的JavaScript代码无法达到预期输出?
问题排查
你的代码一共存在2处明显错误:
- for循环的终止条件设置错误:原代码写的是
i < jsonVal.length-1,你的jsonVal总长度是3,减去1之后终止条件变成i<2,只会遍历索引为1的元素,索引为2的第二条数据会被跳过,直接去掉-1即可。 - 对象属性赋值的语法错误:原代码写的是
newObject[jsonVal[0][j] = d],你把赋值逻辑写在了属性名的方括号里,相当于把d赋值给了jsonVal[0][j]之后,再把这个值作为属性名,没有给对象赋值的逻辑。正确写法是把属性名和赋值拆分:newObject[jsonVal[0][j]] = d。 - 额外优化建议:
map方法的设计目的是返回一个新数组,你这里只是做遍历赋值操作,使用forEach更符合语义,不改也不影响运行结果。
修正后完整代码
let jsonVal = [["ID","Name","Age"],["212","David","38"],["213","Mike","42"]] let newJsonVal = [] // 修正循环终止条件 for (let i = 1; i < jsonVal.length; i++) { let newObject = {} // 修正属性赋值语法,替换为语义更匹配的forEach jsonVal[i].forEach((d,j) => { newObject[jsonVal[0][j]] = d }) newJsonVal.push(newObject) } console.log(newJsonVal)
运行后即可输出你期望的格式。
内容的提问来源于stack exchange,提问作者LuisFRN
相关产品推荐
相关产品推荐

