关于循环赋值的问题?

发布于 6 年前作者 junsong4187 次浏览最后编辑 6 年前来自 ask

function () {

    let that =this

    let dbt = [{},{},{},{},{},{}]

    DB.collection("lchbook").orderBy('jytime','asc').where({jystate :true}).skip(0).limit(0).get({success:(res)=>{

      console.log("dbtmp",dbt)

      const DB_tmp = new Array(res.data.length).fill({}

      for (let i=0;i<res.data.length;i++){      

       DB_tmp[i].jyren = res.data[i].jyren 

       DB_tmp[i].bookname = res.data[i].bookname

       DB_tmp[i].jydate = res.data[i].jydate

       DB_tmp[i].isbn = res.data[i].isbn

       DB_tmp[i].day = that.jieyuedate(res.data[i].jytime)

      }

      that.setData({DB_jy:DB_tmp})

      console.log("DBjy",that.data.DB_jy)

      

    }  })


  },

如果我用dbt来 做FOR语句里的赋值,出来的结果就是正常的,6个值都是查询的结果。

但是我用DB_tmp来赋值,最后的结果就是6个值都是一样的,查询数据里的最后一个结果

1 回复
linwei
linwei1 楼4 年前

因为.fill({})不是创建6个空的{}, 而是6个同时指向一个{}

当一个对象被传递给 fill方法的时候, 填充数组的是这个对象的引用。

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/fill