收藏
回答

微信小程序开发工具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
 
}
 
})


最后一次编辑于  星期三 15:13  (未经腾讯允许,不得转载)
邀请回答
复制链接收藏投诉关注问题回答

2 个回答

  • 思男
    思男
    星期三 15:18

    请使用代码片段复现情况

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

    星期三 15:18
    赞同
    回复 4
    • 千夜
      千夜
      星期三 15:22
      这个代码就是代码片段,没有其他代码,随意新建一个代码片段粘贴上面代码就是这个情况
      星期三 15:22
      回复
    • 思男
      思男
      星期三 15:28回复千夜
      for (i = 0; i < 3; i++) {
       arr1.push(m)
      }

      改为

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


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

      星期三 15:28
      1
      回复
    • 千夜
      千夜
      星期三 15:34
      可以了,谢谢大神!请问数据的拷贝在哪里看?
      星期三 15:34
      回复
    • 思男
      思男
      星期三 15:35回复千夜
      数据的拷贝是js基础知识不是小程序的,百度搜索数据的拷贝就行,浅拷贝深拷贝。
      星期三 15:35
      回复
  • 陈宇明
    陈宇明
    星期三 15:24

    你的预期是?

    星期三 15:24
    赞同
    回复
问题标签