检查嵌套对象在JavaScript中是否仅包含单个键/值对

时间:2019-01-21 09:51:14

标签: javascript object nested

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

有人可以建议我如何实现吗?

1 个答案:

答案 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));