收藏
回答

使用wx.request请求回来的数据,用JSON.parse转成对象,打印转换后的对象有问题?

我将请求过来的数据使用JSON.parse转成对象。然后立即打印转换后的对象,然后将对象forEach将里面的日期格式重新格式化,但是我在这个操作之前打印这个对象却打印的是格式化之后的对象,这是为啥?

js代码:

const res = await httpRequestPost('DSerant/GetTrdeByserOId', params)
    let data = JSON.parse(res.json)
    this.setData({
      ceshi:res.json
    })
    let ccc= JSON.parse(this.data.ceshi)
    console.log(ccc);
    console.log(res);
    console.log('格式化前',data);
    if (data.json.length <= 0) {
      this.setData({
        hasData: data.recordCount == '0' ? false : true,
      })
      util.setReminder('暂无数据!')
      return
    }
    data.json.forEach((el) => {
      let date = new Date(el.SettleDate)
      el.SettleDate = (date.getMonth() + 1) + '-' + date.getDate() + ' ' + (date.getHours() + 1) + ':' + date.getMinutes() + ':' + date.getSeconds()
    })
    console.log('格式化后',data);

1111

打印结果:

格式化前 
{pageCount: "1", recordCount: "1", json: Array(1)}
json: Array(1)
0:
BillCode"xxxxxxxxxxxxxxx"
BuyerSettleMethod55
ModeName"会员码"
RowNumber1
SellerAccountBalance1443.89
SettleDate"1-19 20:2:14"
TradeTotalMoney: -0.93
__proto__: Object
length1
nv_length: (...)
__proto__: Array(0)
pageCount"1"
recordCount"1"
__proto__: Object

格式化后 
{pageCount: "1", recordCount: "1", json: Array(1)}
json: Array(1)
0:
BillCode"xxxxxxxxxxxxxxx"
BuyerSettleMethod55
ModeName"会员码"
RowNumber1
SellerAccountBalance1443.89
SettleDate"1-19 20:2:14"
TradeTotalMoney: -0.93
__proto__: Object
length1
nv_length: (...)
__proto__: Array(0)
pageCount"1"
recordCount"1"
__proto__: Object

返回的json:
"{"pageCount": "1","recordCount": "1","json": [{"RowNumber":1,"BillCode":"xxxxxxxxxxxxxx","BuyerSettleMethod":55,"
ModeName":"会员码","TradeTotalMoney":-0.93,"SellerAccountBalance":1443.89,"SettleDate":"2021/1/19 19:02:14"}]}"

我json返回的时间格式是xx/xx/xx xx:xx:xx;然后按理说我刚转对象打印的时间格式应该跟json是一样的,进行格式化操作后才是xx-xx xx:xx:xx,但是两次打印的是一样的,为啥?

最后一次编辑于  2021-01-20
回答关注问题邀请回答
收藏

3 个回答

  • 微盟
    微盟
    2021-01-20

    在你这份代码中,无论前后data指向的都是同一个对象,你即使再怎么修改data里面的东西,只要data变量指向不变,你打印出来的东西都是同一个东西,你应该去了解下引用类型相关的知识;

    或者你差异的点在于,你知道引用类型,但是console是有先后的为什么先前的还是跟后来的一致了,这个其实也是一样,console只是把对象显示在UI上,但是UI上的东西还是要从真正的对象中来;

    你如果想让console的结果跟对象的时间快照一直,最好的方式就是:console.log(JSON.parse(JSON.stringify(data)));

    2021-01-20
    有用 1
    回复 1
    • 十三
      十三
      2021-01-21
      是的,我就是说log的有时间差,为啥还是一样,这种引用类型的原理我是知道的,你的回答让我理解了。
      2021-01-21
      回复
  • this
    this
    2021-01-20
    你不会以为你不重新赋值,data会自动改变吧,forEach不会修改原数组
    
    2021-01-20
    有用
    回复 1
    • 十三
      十三
      2021-01-21
      我遍历改变了时间的格式,是修改了data对象,我的意识是我在修改前和修改后都打印了data,为啥不是一个是修改前的,一个是修改后的,全是修改后的
      2021-01-21
      回复
  • 呆~
    呆~
    2021-01-20

    你打印的同一个对象,下面改变。上面也会变。

    2021-01-20
    有用
    回复
登录 后发表内容
问题标签