迭代对象的对象以对值执行一些逻辑

问题描述 投票:0回答:1

这是我的问题:我有一个 JSON 对象作为 http 请求的响应,这意味着并非

jsonResponse
内的所有对象都是字符串类型,我也不知道
jsonResponse
内找到了多少对象。

let jsonResponse = {
    prop1: {
        prop: 'objectKey1'
    },
    prop2: {
        prop2: 'objectKey2',
        num: 2,
        stringy: 'stringy'
    },
    key: 'string',
    anotherKey: 'anotherString',
    prop3: {
        objectKey3: 3,
        objectKey4: 'string',
        prop4: {
            moreKeys: 'string',
            num1: 666
        }
    },
    property: 'anotherString2'
}

我想检查该对象内的每个属性/值,包括它的所有子对象键和值,以检查它们是否是字符串类型。

如果它们是一种字符串类型,我想将它们发送到另一个函数以对该字符串执行特定逻辑,并更改它在

jsonResponse
内的值。

我尝试做这样的事情-

Object.keys(jsonResponse).forEach((key, indexValue)=>{
    if(typeof(jsonResponse[key])==='string'){
        somelogic(jsonResponse[key])
    } else if (typeof(jsonResponse[key] === 'object')){
        //recursive function to keep getting keys and values inside the jsonResponse
    }
})

因此,我似乎在

jsonResponse
中丢失了一些对象,并且我不知道如何迭代子对象及其受尊重的键和值。

我知道我不会遍历所有对象,我只是不确定如何递归地执行它或者递归是否是正确的方法。

我也尝试过使用

Object.entries()
,但棘手的部分是我永远不会知道
jsonResponse
内有多少个对象,也不知道有多少个对象的对象。

以时间复杂度的方式最快的方法是什么?

javascript loops dictionary object time-complexity
1个回答
0
投票

let jsonResponse = {
  prop1: {
      prop: 'objectKey1'
  },
  prop2: {
      prop2: 'objectKey2',
      num: 2,
      stringy: 'stringy'
  },
  key: 'string',
  anotherKey: 'anotherString',
  prop3: {
      objectKey3: 3,
      objectKey4: 'string',
      prop4: {
          moreKeys: 'string',
          num1: 666
      }
  },
  property: 'anotherString2'
}

function somelogic(a) {
  console.log('>>>', a);
}

function getStringKeys(jsonResponse) {
  Object.keys(jsonResponse).forEach((key, indexValue)=>{
    if(typeof(jsonResponse[key])==='string'){
        somelogic(jsonResponse[key])
    } else if (typeof(jsonResponse[key] === 'object')){
      getStringKeys(jsonResponse[key]);
    }
  })
}

getStringKeys(jsonResponse);

© www.soinside.com 2019 - 2024. All rights reserved.