簡體   English   中英

如何遍歷具有嵌套屬性的JSON對象,操作並返回新對象?

[英]How to iterate through a JSON Object with nested properties, manipulate and return a new object?

我有一個具有嵌套屬性的JSON對象,如下所示:

var obj = {

 "a0": {
    "count": 41,
    "name": "Park",
    "new": {
      "id": 35,
      "registerid": 46
     }
  },

  "a1": {
    "count": 52,
    "name": "Greg",
    "old": {
      "id": 38,
      "registerid": 49
     }
  },

  "a2": {
    "count": 150,
    "name": "Sylvain",

  }

}

我想遍歷整個對象,找到具有數值的屬性,並用計算值替換它們,然后返回一個新對象。

因此,如果傳遞上述JSON對象,我想將其返回為:

result = {

     "a0": {
        "count": 411.067,
        "name": "Park",
        "new": {
          "id": 351.067,
          "registerid": 461.067
         }
      },

      "a1": {
        "count": 521.067,
        "name": "Greg",
        "old": {
          "id": 381.067,
          "registerid": 491.067
         }
      },

      "a2": {
        "count": 150.067,
        "name": "Sylvain"
      }

    }

還有一個類似的問題在這里 ,我以前問及有一個神話般的答案,但它不處理的巢式病例,並沒有與替換返回整個對象,但不會返回與數字對象屬性過濾的對象。

我嘗試在Object.keys()上使用forEach並在其中調用映射,但是好像我在回調函數中失去了變量作用域。

let result = Object.keys(obj).forEach(function(key, index) {
  Object.keys(obj).map((key) => {
    let o = obj[key];
    console.log("Object is:", o);  
    return Object.keys(o).reduce((r, k) => typeof o[k] === 'number' ? Object.assign(r, { [k]:precise(o[k], 5) }) : r , {});
  });
});

console.log(result);

誰能幫我這個忙。

謝謝。

我將使用遞歸調用:

function process(obj) {
  let result = {};
  Object.keys(obj).forEach(k => {
      if(typeof obj[k] === 'number') {
        result[k] = obj[k] += 0.067; // calculate you numeric properties here!
      }
      else if(typeof obj[k] === 'object') {
        result[k] = process(obj[k]); // a recursive call for nested objects
      }
      else {
        result[k] = obj[k]; // just pass an orginal value
      }
    }
  );
  return result;
}

let result = process(obj); // here the obj is the initial data object

我還創建了Plunker演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM