为什么JS循环遍历二维数组生成对象时跳过了首行元素?
问题原因
- 代码并没有跳过第一行内容,你得到第二行的结果是因为每次循环都直接覆盖了同一个对象的属性:
第一次循环处理第一行["a", "b", "c"]时,确实已经把对象z赋值为{ firstName: 'a', lastName: 'b', gender: 'c' };第二次循环处理第二行["d", "e", "f"]时,又对z的三个属性做了重新赋值,直接覆盖了上一次的结果,最终返回的就是最后一次循环的赋值结果。 - 额外的不规范问题:循环变量
a没有用var/let/const声明,会被隐式创建为全局变量,容易污染全局作用域。
常见场景修改参考
如果你的需求是把二维数组的每一行都转为对应对象,最终输出对象数组,修改如下:
function x(y) { var result = [] // 用let声明块级作用域的循环变量 for (let a = 0; a < y.length; a++) { // 每一行单独新建对象,避免覆盖 var z = {} z.firstName = y[a][0] z.lastName = y[a][1] z.gender = y[a][2] result.push(z) } return result }
如果你的需求就是取二维数组最后一行生成对象,不需要写循环,直接取最后一个元素赋值即可:
function x(y) { const lastItem = y[y.length - 1] return { firstName: lastItem[0], lastName: lastItem[1], gender: lastItem[2] } }
内容的提问来源于stack exchange,提问作者Arief Rahman
相关产品推荐
相关产品推荐

