Проверка, если вложенный объект содержит только одну пару ключ-значение в JavaScript - PullRequest
0 голосов
/ 21 января 2019

Я хочу проверить, состоит ли глубоко вложенный объект из одной пары ключ-значение, если это так, он должен вернуть 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"
        }
      }
    }
  }
}

Iсделал для него следующую программу, но она не работает,

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 голосов
/ 21 января 2019

С 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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...