关于循环赋值的问题?
发布于 5 年前 作者 junsong 3989 次浏览 来自 问答

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 回复

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

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

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

回到顶部