cqwcns 发表于 2021-9-12 11:29

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'
      }
      }

cube 发表于 2021-9-12 12:32

let val1 = 123
eval('data = ' + JSON.stringify(data).replaceAll("\"dbServerDate\"","`${var1}`"))

涛之雨 发表于 2021-9-12 13:10

本帖最后由 涛之雨 于 2021-9-12 13:12 编辑

如果没有json不支持的内容,转字符串然后重新解析回去是最好的了
但是不推荐楼上的eval解析回json,最好还是JSON.parse解析回去
然后如果需要格式化输出parse也可以非常方便的格式化输出

cqwcns 发表于 2021-9-12 14:09

这样?

JSON.parse(JSON.stringify(data).replace(/"dbServerDate"/g, '"thisTime"'))


不知道map函数能不能实现这个需求。

cqwcns 发表于 2021-9-12 14:26

涛之雨 发表于 2021-9-12 13:10
如果没有json不支持的内容,转字符串然后重新解析回去是最好的了
但是不推荐楼上的eval解析回json,最好还 ...

测试了一下,还真有json不支持的内容的内容,微信小程序云函数中,有个系统时间是这样写的db.serverDate(),替换后parse不回来了。{:1_936:}

cqwcns 发表于 2021-9-12 21:42

最后用了这个办法。


   // 递归遍历并替换指定值
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]
查看完整版本: JS对象替换多个属性的问题。