【发布时间】:2020-04-27 16:37:27
【问题描述】:
如果我在外部 for 循环内定义 obj 变量,它不会覆盖第一次迭代数据,但是当我在 for 循环外定义 obj 变量时,它会用第二次迭代数据覆盖迭代数据。有人可以帮我理解为什么吗?
另外,我知道还有其他方法可以用 map() 和 reduce() 来解决这个问题,但我必须这样解决。
function transformEmployeeData(arr) {
let newArr = []
**let obj = {}**
for (let i = 0; i < arr.length; i++) {
**let obj = {}**
for (let j = 0; j < arr[i].length; j++) {
obj[arr[i][j][0]] = arr[i][j][1]
}
newArr.push(obj)
}
return newArr
}
var input = [
[
['firstName', 'Joe'],
['lastName', 'Blow'],
['age', 42],
['role', 'clerk']
],
[
['firstName', 'Mary'],
['lastName', 'Jenkins'],
['age', 36],
['role', 'manager']
]
];
console.log(transformEmployeeData(input))
【问题讨论】:
-
变量声明无关紧要,但您需要在每次迭代时创建一个新对象 (
= {})。push不会将对象的内容复制到数组中。如果不重新初始化对象,所有数组索引都引用 same 对象实例。
标签: javascript arrays for-loop object