在 javascript 中检查嵌套对象是否只包含单个键值对



我想检查深度嵌套的对象是否由单个键值对组成,如果是,它应该返回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));

最新更新