我将请求过来的数据使用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"
BuyerSettleMethod: 55
ModeName: "会员码"
RowNumber: 1
SellerAccountBalance: 1443.89
SettleDate: "1-19 20:2:14"
TradeTotalMoney: -0.93
__proto__: Object
length: 1
nv_length: (...)
__proto__: Array(0)
pageCount: "1"
recordCount: "1"
__proto__: Object
格式化后
{pageCount: "1", recordCount: "1", json: Array(1)}
json: Array(1)
0:
BillCode: "xxxxxxxxxxxxxxx"
BuyerSettleMethod: 55
ModeName: "会员码"
RowNumber: 1
SellerAccountBalance: 1443.89
SettleDate: "1-19 20:2:14"
TradeTotalMoney: -0.93
__proto__: Object
length: 1
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,但是两次打印的是一样的,为啥?
在你这份代码中,无论前后data指向的都是同一个对象,你即使再怎么修改data里面的东西,只要data变量指向不变,你打印出来的东西都是同一个东西,你应该去了解下引用类型相关的知识;
或者你差异的点在于,你知道引用类型,但是console是有先后的为什么先前的还是跟后来的一致了,这个其实也是一样,console只是把对象显示在UI上,但是UI上的东西还是要从真正的对象中来;
你如果想让console的结果跟对象的时间快照一直,最好的方式就是:console.log(JSON.parse(JSON.stringify(data)));
你不会以为你不重新赋值,data会自动改变吧,forEach不会修改原数组
你打印的同一个对象,下面改变。上面也会变。