在 vue2 或 js 中,有一个 json 对象,赋值后数据却变了

2021-09-26 12:31:22 +08:00
 sunorg

请教个问题

在 vue2 中,有一个 json 对象,赋值后数据却变了,哪位高人熟手给指点下啥原因,拜谢!

问题代码
test() {
        const data ='{
    "code":200,
    "message":"获取成功",
    "data":{
        "list":[
            {
                "id":4,
                "parent_id":0,
                "title":"WHWHWHWHWHWHWHWH",
                "xxx_pri":"0.95",
                "xxx_pri":"0.98",
                "state":1
            },
        ],
        "count":"1"
    }
}'
        const d = JSON.parse(data)
        console.log(d.data.list)    //此时 list[0].state=1
       
        this.type_list = d.data.list
        console.log(this.type_list) //此时 list[0].state=0,
      },

如在赋值之前,加入语句,强制 int 转 string 则可以。


 //加入转换
 d.data.list.forEach((element) => {
          element.state = element.state.toString()
 })
 

百思不得其解,哪位给指点一二

2648 次点击
所在节点    Vue.js
14 条回复
xiongotom
2021-09-26 13:17:08 +08:00
应该是 this.type_list 绑定了什么东东
sunorg
2021-09-26 13:17:59 +08:00
@xiongotom 默认定义

type_list=[]
xiongotom
2021-09-26 13:23:11 +08:00
@sunorg 比如跟模板绑定啥的,仔细检查下,可能就是某个小细节没注意。
pupboss
2021-09-26 13:30:48 +08:00
了解一下深拷贝浅拷贝
clf
2021-09-26 13:31:24 +08:00
调试。
en20
2021-09-26 14:15:24 +08:00
首先你这段代码都不能执行. 看着像 vue 代码, 检查下是不是绑定在了表单或者组件上,可能某个地方更改了数据
dfkjgklfdjg
2021-09-26 14:21:22 +08:00
一眼感觉是你的其他业务代码修改了,监听一下每次修改。或者给这个对象加一个 setter 在内部打印,我想应该就可以看到问题了。
en20
2021-09-26 14:21:59 +08:00
该现象换了另外一台电脑无法重现。
该现象代码,换到其他页面上去,也没问题,特定那个页面。。。

一看就是有异步操作把值改变了, object.assign 要是有问题三大框架做的网站全没法用了.
3wdddd
2021-09-26 14:38:07 +08:00
你发的这段代码并不是问题代码,检查一下你的 mixins,组件的 props,watch 函数,v-model, sync 语法糖,绝壁被别的地方改动了
aikilan
2021-09-26 16:10:03 +08:00
建议贴一下当前组件全部上下文代码
sjhhjx0122
2021-09-26 17:14:54 +08:00
试试赋给 type_list 时深拷贝一下
Chingim
2021-09-26 18:38:43 +08:00
试着 console.log 的时候不要打印对象, 因为这个对象有可能是 log 之后才被改的, 但是却给你一种"console.log 的时候就是这个值"的感觉


const d = JSON.parse(data)
console.log(JSON.stringify(d.data.list))

this.type_list = d.data.list
console.log(JSON.stringify(this.type_list))

以上全是同步的代码, 没理由值会变
cheese
2021-09-26 19:32:58 +08:00
不会是深浅拷贝的问题,你看看监视数据的函数,肯定是改动了
2i2Re2PLMaDnghL
2021-09-27 10:07:37 +08:00
你的 this 是哪来的?
先把打印部分这样改下

const d = JSON.parse(data)
console.log(d.data.list)

this.type_list = d.data.list
console.log(d.data.list)
console.log(this.type_list)
console.log(d.data.list===this.type_list)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/804333

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX