JS对象替换多个属性的问题。
我有一个对象,其中有多个'dbServerDate'这样的字符串,当然它的位置和数量都不是固定的。我需要将'dbServerDate'全部替换为另一个变量,例如替换成thisTime。
递归遍历肯定不是正道,各位大佬有什么好的方法,指教一下,谢谢。
data: {
doWhat: 'add',
collection: 'staff',
data: {
field1: 'field1val',
field2: 123,
field3: {
test3: 'test33',
test333: 123888,
time: 'dbServerDate'
},
field4: ['aa', 321, 'bb', 'dbServerDate'],
field5: true,
field6: {
"type": "Point",
"coordinates":
},
field7: 'dbServerDate'
}
} let val1 = 123
eval('data = ' + JSON.stringify(data).replaceAll("\"dbServerDate\"","`${var1}`")) 本帖最后由 涛之雨 于 2021-9-12 13:12 编辑
如果没有json不支持的内容,转字符串然后重新解析回去是最好的了
但是不推荐楼上的eval解析回json,最好还是JSON.parse解析回去
然后如果需要格式化输出parse也可以非常方便的格式化输出 这样?
JSON.parse(JSON.stringify(data).replace(/"dbServerDate"/g, '"thisTime"'))
不知道map函数能不能实现这个需求。 涛之雨 发表于 2021-9-12 13:10
如果没有json不支持的内容,转字符串然后重新解析回去是最好的了
但是不推荐楼上的eval解析回json,最好还 ...
测试了一下,还真有json不支持的内容的内容,微信小程序云函数中,有个系统时间是这样写的db.serverDate(),替换后parse不回来了。{:1_936:} 最后用了这个办法。
// 递归遍历并替换指定值
funForIn(data) {
for (let i in data) {
if (Object.prototype.toString.call(data) === '' || Object.prototype.toString.call(data) === '') {
that.funForIn(data)
} else {
if (data == 'dbServerDate') {
data = 'thisNow'
}
}
}
},
// 调用
const data = {
name: 'playCloud',
data: {
doWhat: 'add',
collection: 'staff',
data: {
field1: 'field1val',
field2: 123,
field3: {
test3: 'test33',
test333: 666666666,
time: 'dbServerDate'
},
field4: ['aa', 321, 'bb', 'dbServerDate'],
field5: true,
field6: {
"type": "Point",
"coordinates":
},
field7: 'dbServerDate'
}
}
}
that.funForIn(data)
console.log(data)
页:
[1]