收藏
回答

循环二维数组赋值,为什么总是拿到最后一次数据?

for (let i in lisr) {

for (let a in lisr[i]) {

lisr[i][a].namezz = i

}

console.log(lisr, 123456);

}

回答关注问题邀请回答
收藏

2 个回答

  • 沉冰
    沉冰
    2023-05-09

    你这个应该是js引用导致的问题

    下面两段代码中,第一段为正常,第二段为错误

    正常的结果

    let arr = []
    for (let i = 0; i < 10; i++) {arr[i] = [{id: 'a'}, {id: 'b'}, {id: 'c'}, {id: 'd'}, {id: 'e'}]}
    
    
    for (let i in arr) {
        for (let j in arr[i]) {
            arr[i][j].name = i
        }
    }
    
    
    console.log(arr)
    

    错误的结果

    let arr = []
    let arr1 = [{id: 'a'}, {id: 'b'}, {id: 'c'}, {id: 'd'}, {id: 'e'}]
    for (let i = 0; i < 10; i++) {arr[i] = arr1}
    
    
    for (let i in arr) {
        for (let j in arr[i]) {
            arr[i][j].name = i
        }
    }
    
    
    console.log(arr)
    


    原因是由于数组都引用的同一个对象,后面的修改导致前面的也被改动了

    这个问题是属于js引用的问题

    解决方式

    1. 不要使用数组去循环引用一个对象
    2. 如果必须使用同一对象,才用深克隆等方式复制,防止直接引用导致修改
    2023-05-09
    有用 1
    回复
  • Mr.Zhao
    Mr.Zhao
    2023-05-09

    写个代码片段

    2023-05-09
    有用
    回复
登录 后发表内容