递归替换所有对象值

Vik*_*iya 3 javascript

我在我的一个项目中使用的是angular 4,因此我必须将所有{ data } 替换为{{ data }}。即如果我有这样的对象

{
    key: {
             key1: {
                       key2: "This is data {someData}",
                       key3: "This is data2 {someData2}"
                   }
         },
    key2: "This is data3 {someData3}"
}
Run Code Online (Sandbox Code Playgroud)

结果应该是

{
    key: {
             key1: {
                       key2: "This is data {{someData}}",
                       key3: "This is data2 {{someData2}}"
                   }
         },
    key2: "This is data3 {{someData3}}"
}
Run Code Online (Sandbox Code Playgroud)

我对递归的工作方式不满意。因此,我无法显示我尝试过的任何内容。请帮忙。任何帮助,将不胜感激。

brk*_*brk 5

希望你可以尝试这样的事情。

var orgObj = {
  key: {
    key1: {
      key2: "This is data {someData}",
      key3: "This is data2 {someData2}"
    }
  },
  key2: "This is data3 {someData3}"
}

function changeValue(obj) {
  if (typeof obj === 'object') {
    // iterating over the object using for..in
    for (var keys in obj) {
      //checking if the current value is an object itself
      if (typeof obj[keys] === 'object') {
        // if so then again calling the same function
        changeValue(obj[keys])
      } else {
        // else getting the value and replacing single { with {{ and so on
        let keyValue = obj[keys].replace('{', '{{').replace('}', '}}');
        obj[keys] = keyValue;
      }
    }
  }
  return obj;
}
console.log(changeValue(orgObj))
Run Code Online (Sandbox Code Playgroud)