Получить значение из вложенного объекта с помощью рекурсии - PullRequest
1 голос
/ 29 апреля 2020

У меня есть JS объект data, из этого массива объекта, Мне нужно взять значение "amount", которое находится внутри массива "limitBreakup" . Я сделал с использованием .map(), но я заинтересован в реализации того же самого с использованием Рекурсия .

var data = [
   {
      "limitRequirementId":"123",
      "facilityType":"cc",
      "amount":800000,
      "existingRoi":12,
      "existingPf":12100,
      "repoRate":5,
      "spread":10,
      "tenure":24,
      "margin":10000,
      "loanVariable":{
         "type":"roi/commission",
         "value":15
      },
      "limitBreakup":[
         {
            "limitRequirementId":"13",
            "facilityType":"cc",
            "repoRate":5,
            "amount":8000,
            "spread":10,
            "tenure":24,
            "margin":100,
            "loanVariable":{
               "type":"roi/commission",
               "value":15
            }
         },
         {
            "limitRequirementId":"22",
            "facilityType":"LC",
            "repoRate":4,
            "amount":900,
            "spread":6,
            "tenure":21,
            "margin":15,
            "loanVariable":{
               "type":"roi/commission",
               "value":10
            }
         }
      ]
   },
   {
      "limitRequirementUniqueId":"13",
      "limitRequirementId":"13",
      "facilityType":"lc",
      "amount":900000,
      "existingRoi":10,
      "existingPf":1000,
      "repoRate":3,
      "spread":1,
      "tenure":21,
      "margin":1000,
      "loanVariable":{
         "type":"roi/commission",
         "value":15
      },
      "limitBreakup":[
         {
            "limitRequirementId":"35",
            "facilityType":"CC",
            "repoRate":6,
            "amount":600,
            "spread":8,
            "tenure":28,
            "margin":13,
            "loanVariable":{
               "type":"roi/commission",
               "value":14
            }
         }
      ]
   }
]

Мое решение с использованием обычной итерации работает:

data.forEach((d, i)=>{
    let limitBreakup = d.limitBreakup;
   if(Array.isArray(limitBreakup)){
limitBreakup.forEach((l)=>{  console.log(l, '->', l.amount)  })
    }else{
        console.log(limitBreakup, 'else->', limitBreakup.amount) 
  }
   //console.log(d.limitBreakup);

})

Но используя рекурсию, я на полпути:

https://jsfiddle.net/1g98sLw3/2/

http://www.mocky.io/v2/5ea974eb3400005e003f0203 (Так как объект json очень большой, я вставил в mocky.io для справки)

1 Ответ

0 голосов
/ 29 апреля 2020

Как-то так должно работать

Демонстрационное доказательство: https://jsfiddle.net/do58kj3q/

Вам нужно al oop, чтобы пройти через ваши объекты и затем добавить их в массив когда вы соответствуете критериям

var data = [{
    "limitRequirementId": "123",
    "facilityType": "cc",
    "amount": 800000,
    "existingRoi": 12,
    "existingPf": 12100,
    "repoRate": 5,
    "spread": 10,
    "tenure": 24,
    "margin": 10000,
    "loanVariable": {
      "type": "roi/commission",
      "value": 15
    },
    "limitBreakup": [{
        "limitRequirementId": "13",
        "facilityType": "cc",
        "repoRate": 5,
        "amount": 8000,
        "spread": 10,
        "tenure": 24,
        "margin": 100,
        "loanVariable": {
          "type": "roi/commission",
          "value": 15
        }
      },
      {
        "limitRequirementId": "22",
        "facilityType": "LC",
        "repoRate": 4,
        "amount": 900,
        "spread": 6,
        "tenure": 21,
        "margin": 15,
        "loanVariable": {
          "type": "roi/commission",
          "value": 10
        }
      }
    ]
  },
  {
    "limitRequirementUniqueId": "13",
    "limitRequirementId": "13",
    "facilityType": "lc",
    "amount": 900000,
    "existingRoi": 10,
    "existingPf": 1000,
    "repoRate": 3,
    "spread": 1,
    "tenure": 21,
    "margin": 1000,
    "loanVariable": {
      "type": "roi/commission",
      "value": 15
    },
    "limitBreakup": [{
      "limitRequirementId": "35",
      "facilityType": "CC",
      "repoRate": 6,
      "amount": 600,
      "spread": 8,
      "tenure": 28,
      "margin": 13,
      "loanVariable": {
        "type": "roi/commission",
        "value": 14
      }
    }]
  }
]

var array=[];
function recursiveCounter(arr) {
  for (let i = 0; i < arr.length; i++) {
    const obj = arr[i];
    if (!obj.limitBreakup) {
      array.push(obj.amount);
    }
    if (Array.isArray(obj.limitBreakup)) {
      recursiveCounter((obj.limitBreakup));
    }
  }
}

recursiveCounter(data);
console.log(array)
...