这是我的问题:我有一个 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
内有多少个对象,也不知道有多少个对象的对象。
以时间复杂度的方式最快的方法是什么?
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);