我正在尝试编写一个javascript递归函数,该函数接收一个参数-嵌套JSON对象。
函数遍历可能无限嵌套的对象,并将所有键(属性名)转换为存储在数组中的字符串。Array返回到调用函数的位置。
JSON对象示例:
{
OBJECT1: {
ATTRIBUTE3: {
PARAMETER2: {
PROPERTY1: {
}
}
}
}
}
该对象不包含任何值。
我尝试过但没有成功的方法:
function convertKeysToString(obj) {
let keys = [];
for (let key in obj) {
if (typeof obj[key] === 'object') {
keys = keys.concat(convertKeysToString(obj[key]));
} else {
keys.push(key.toString());
}
}
return keys;
}
结果,我期望返回的键被推送到数组,但是函数根本没有得到键或者没有被推送到键数组。
我试过另一个密码:
function getNestedObjectKeys(obj) {
var keys = []
var firstLevel = null
var property = Object.keys(obj)
property = property[0]
firstLevel = Object.keys(obj[property])[0]
if (firstLevel == undefined) {
return 0
}
let returnedValue = keys.unshift(getNestedObjectKeys(obj[property]))
if (returnedValue == 0) {
return Object.keys(obj[property])[0]
}
returnedValue = Object.keys(obj[property])[0]
if (returnedValue != obj[property[0]]) {
return Object.keys(obj[property])[0]
}
else if (returnedValue == firstLevel) {
return keys
}
}
函数应该返回键名,并将其推(unshift)到string,然后返回它,但unshift没有做我所期望的,并且在returnedValue中不是预期的返回字符串。
我处理它的方法是函数找到最深的(空的)对象,然后开始返回键名,问题是我必须返回键名并将其推送到字符串中,我找不到立即完成的方法。
2条答案
按热度按时间e4eetjau1#
第一个解决方案非常接近,但有一个问题(嗯,一个主要问题):当值是
object
类型时,你不把它的键加到数组中,那么它应该如何进入数组呢?给予这个:您可能需要考虑的其他事项:
1.就是
typeof null
typeof []
也是object
。hmae6n7t2#
你可以看看对象,这是真实的和类型的对象。