html52.com
我爱小程序-开发者交流社区

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

)
//页面.wxml
<button bindtap="h">h</button>
//app.js
App({
  globalData: {
    playList:[],
  },
})

//页面.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:[],
  },
})

网友回复

圣殿骑士:

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

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

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

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

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


undefined:

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

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

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

真正的个人免签约支付接口

云免签H5支付