Как вывести ключи в паре ключ-значение во вложенных массивах, используя конструктор Javascript - PullRequest
0 голосов
/ 07 ноября 2018

В массиве «items» я хотел вывести в массиве «info» только ключи: [ 'stringTwo', 'StringThree' ] а также выведите значение String Three

let items = [
  {
    string: 'string1',
    info:
    {
      stringTwo:'String Two',
      stringThree: 'String Three'
    },
    size:3445
  },
  {
    string: 'string2',
    info: 'ruby files'
  },
  {
    string: 'string3',
    info: ''
  },
  {
    string: 'string4 without info key',
  }
];

Я пытался использовать оба этих кода:

data.forEach((data) => {
  if(data.info.constructor === Object) {
    console.log(Object.keys(data.info));
  }
})

data.forEach((data) => {
  if(data.info.constructor === Object) {
    console.log((data.info.stringThree));
  }
})

первый должен вывести ключи [ 'stringTwo', 'StringThree' ] а второй должен вывести String Three

Мне интересно, почему в более широком масштабном массиве, который имеет больше пар ключ-значение, оба не работают и дают мне ввод TypeError: Cannot read property 'constructor' of undefined? если да, есть ли другие способы без использования конструктора?

1 Ответ

0 голосов
/ 07 ноября 2018

В вашем массиве большего масштаба, вероятно, нет ключа info. Чтобы избежать ошибки, необходимо:

  • Измените массив элементов , чтобы поставить ключ info, даже пустой

    или

  • Добавьте условие typeof data.info !== "undefined" , чтобы проверить , если ключ info определен для каждого элемента, прежде чем пытаться получить к нему доступ.

Вот рабочий пример:

let items = [
  {
    string: 'string1',
    info:
    {
      stringTwo:'String Two',
      stringThree: 'String Three'
    },
    size:3445
  },
  {
    string: 'string2',
    info: 'ruby files'
  },
  {
    string: 'string3',
    info: ''
  },
  {
    string: 'string4 without info key',
  }
];


items.forEach((data) => {
  if(typeof data.info !== "undefined" && data.info.constructor === Object) {
    console.log(data.info.stringThree);
  }
})
...