我想检查深度嵌套的对象是否由单个键值对组成,如果是,则应返回true,否则返回false。
例如,我希望下面的代码返回true
,
var test = {
level1:
{
level2:
{
level3:'level3'
}
}
};
下面的代码返回false
,
var test2 = {
level1: {
level2: {'a': '1', 'b': 2},
level3: {'a': '2', 'c': 4}
}
};
此外,以下代码应返回true
,
var test3 =
{
level1: {
level2: {
level3: {
level4: {
1: "1",
2: "2",
3: "3",
4: "4"
}
}
}
}
}
我为此编写了以下程序,但是它不起作用
function checkNested(obj) {
if(typeof(obj) === 'object') {
if(Object.keys(obj).length === 1) {
var key = Object.keys(obj);
checkNested(obj[key])
} else {
return(false);
}
}
return(true);
}
有人可以建议我如何实现吗?
答案 0 :(得分:4)
使用var key = Object.keys(obj);
,key
成为一个 array (包含一个键),因此obj[key]
毫无意义。您可以改为破坏[key]
:
const [key] = Object.keys(obj);
return checkNested(obj[key])
(请确保return
进行递归调用)
或者,甚至更好的方法是使用Object.values
,因为您实际上并不关心密钥:
var test = {
level1: {
level2: {
level3: 'level3'
}
}
};
var test2 = {
level1: {
level2: 'level2',
level3: 'level3'
}
};
function checkNested(obj) {
if (typeof(obj) === 'object') {
const values = Object.values(obj);
if (values.length !== 1) {
return false;
}
return checkNested(values[0]);
}
return true;
}
console.log(checkNested(test));
console.log(checkNested(test2));