我想检查深度嵌套的对象是否由单个键值对组成,如果是,它应该返回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);
}
有人可以建议我如何实现它吗?
使用 var key = Object.keys(obj);
时,key
变成一个数组(包含一个键),所以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));