json 递归函数没有发回完整的 Json 对象

json recursive function does not send back complete Json Object

我有以下 JsonObject

let jsonObject = {
  "augmentedReality": {
    "enabled": false,
    "augmentedRealitySettings" : [
      {
        "assetId": 7
      }
    ]
  }
}

我已经编写了一个如下所示的递归函数

 isAssetId(jsonObject: any) {

for (let key in jsonObject) {

  if (typeof jsonObject[key] === "object") {

    jsonObject[key] =  this.isAssetId(jsonObject[key]);

  } else {
   
    if(key=='assetId'){
      jsonObject[key]=3;

    }} }

return jsonObject;

}

我的目标是更改 assetId 在 jsonObject 中的任何位置。这个 JSON 只是一个例子,而 assetId 可能更深。 代码的问题在于,当它成功执行时 returns 以下 JSON 对象 我用以下内容调用该函数:

jsonObject=  isAssetId(jsonObject);

console.log(jsonObject);

我得到以下结果。

  {
  augmentedReality: { enabled: false, augmentedRealitySettings: [ 
  [Object] ] }
   }
 

Object应该显示它没有对象的数据。 我无法弄清楚似乎是什么问题。任何帮助将不胜感激?

更新: 我将代码写入以下站点 here 奇怪的是它在这里工作正常,但它不适用于我在 NestJs 上的打字稿?现在是什么原因?

问题出在函数中的“this”关键字。有关详细信息,请查看 post

let jsonObject = {
  "augmentedReality": {
    "enabled": false,
    "augmentedRealitySettings" : [
      {
        "assetId": 7
      }
    ]
  }
}


var json = isAssetId(jsonObject);

console.log(JSON.stringify(json));

isAssetId(jsonObject) {

for (let key in jsonObject) {

  if (typeof jsonObject[key] === "object") {

    jsonObject[key] =  isAssetId(jsonObject[key]);

  } else {
   
    if(key=='assetId'){
      jsonObject[key]=3;

    }} }

return jsonObject;

}

你的代码逻辑有问题。有一次你像对象一样遍历数组。你可以这样做:

var json = isAssetId(jsonObject);

console.log(JSON.stringify(json));

function isAssetId(jsonObject) {

for (let key in jsonObject) {

  if(Array.isArray(jsonObject[key])){
          for (const [i ,element] of jsonObject[key].entries()) {
           jsonObject[key][i] =  isAssetId(element);
      }
  }

  else if (typeof jsonObject[key] === "object") {

  jsonObject[key] =  isAssetId(jsonObject[key]);

  } else {

     if(key=='assetId'){
  jsonObject[key]=3;

}} }

return jsonObject;

}