收藏
回答

微信小程序开发工具json对象数组赋值一个数组元素为什么会导致整个数组被赋值?


arr1是直接定义的Json对象数组,赋值正常,arr2是循环添加的Json对象数组,赋值异常,下面是输出结果和源代码

const app = getApp()
 
Page({
 
data: {
 
a: '1'
 
},
 
onLoad: function() {
 
this.bugtest()
 
},
 
bugtest: function() {
 
console.log('开始')
 
let i
 
let arr1 = []
 
let arr2 = [{
 
"code": "1",
 
"text": "1",
 
"t": "1",
 
"ms": "1"
 
}, {
 
"code": "1",
 
"text": "1",
 
"t": "1",
 
"ms": "1"
 
}, {
 
"code": "1",
 
"text": "1",
 
"t": "1",
 
"ms": "1"
 
}]
 
let m = {
 
"code": "1",
 
"text": "1",
 
"t": "1",
 
"ms": "1"
 
}
 
for (i = 0; i < 3; i++) {
 
arr2[i].code=i+1
 
}
 
console.log(arr2)
 
for (i = 0; i < 3; i++) {
 
arr1.push(m)
 
}
 
console.log(arr1)
 
arr1[0].code=5
 
}
 
})


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

2 个回答

  • 陈宇明
    陈宇明
    2019-09-11

    你的预期是?

    2019-09-11
    有用
    回复
  • 思男
    思男
    2019-09-11

    请使用代码片段复现情况

    https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html

    2019-09-11
    有用
    回复 5
    • 千夜
      千夜
      2019-09-11
      这个代码就是代码片段,没有其他代码,随意新建一个代码片段粘贴上面代码就是这个情况
      2019-09-11
      回复
    • 思男
      思男
      2019-09-11回复千夜
      for (i = 0; i < 3; i++) {
       arr1.push(m)
      }

      改为

      for (i = 0; i < 3; i++) {
       arr1.push(JSON.parse(JSON.stringify(m)))
      }


      就行了  请了解一下数据的拷贝

      2019-09-11
      2
      回复
    • 千夜
      千夜
      2019-09-11
      可以了,谢谢大神!请问数据的拷贝在哪里看?
      2019-09-11
      回复
    • 思男
      思男
      2019-09-11回复千夜
      数据的拷贝是js基础知识不是小程序的,百度搜索数据的拷贝就行,浅拷贝深拷贝。
      2019-09-11
      回复
    • 黑睿
      黑睿
      2022-04-05回复思男
      受教了,万分感谢!之前弄VUE就有遇到这问题,后来也是这样解决的,但如今却忘光了,如果不是搜到这个贴子,估计我要死不瞑目了,折腾了一整天,太无语了。
      2022-04-05
      回复
登录 后发表内容
问题标签