繁体   English   中英

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

[英]Checking if a nested object contains only single key-value pair in 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)); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM