收藏
回答

globalData的数组B获取页面数组A后,调整数组B的顺序,数组A的首项消失了?

//页面.js
const app = getApp()
Page({
  data: {
    album:[1,2,3,4]
  },
  onLoad: function () {
    app.globalData.playList=this.data.album
  },
  h(){
    //更换顺序
    var arr1 = app.globalData.playList[0]
    app.globalData.playList.splice(01)
    var arr2 = app.globalData.playList.concat(arr1)
    app.globalData.playList=arr2   

    console.log('globalData.playList:'+app.globalData.playList)
    console.log('album:'+this.data.album)
  }
})
//页面.wxml
<button bindtap="h">h</button>
//app.js
App({
  globalData: {
    playList:[],
  },
})
最后一次编辑于  2020-04-05
回答关注问题邀请回答
收藏

3 个回答

  • 游戏人生
    游戏人生
    2020-04-05

    有个堆内存和栈内存的概念,这里要用深拷贝

    app.globalData.playList.splice(0, 1)
    

    你的这个修改,导致对应的this.data.album指针改变,指向同一份数据的另一个指针

    可以利用 ES6 中的扩展运算符来复制数组,比如

    let a = this.data.album;
    app.globalData.playList= [...a];
    


    2020-04-05
    有用 1
    回复 1
    • 苏观拉底
      苏观拉底
      2020-04-05
      谢谢
      2020-04-05
      回复
  • Mr.Zhao
    Mr.Zhao
    2020-04-05

    app.globalData.playList = JSON.parse(JSON.stringify(this.data.album))

    改成这样,就不会丢失了。数组、对象类型为地址引用,A赋值给B,B修改了,A也会被修改。百度一下js的值引用和地址引用吧

    2020-04-05
    有用 1
    回复 1
    • 苏观拉底
      苏观拉底
      2020-04-05
      谢谢大佬
      2020-04-05
      回复
  • now
    now
    2020-04-07

    同上

    2020-04-07
    有用
    回复
登录 后发表内容
问题标签