Получить строковые значения из массива в объекте, который находится в массиве - PullRequest
0 голосов
/ 31 октября 2018

У меня есть следующий объект JSON:

var test = {
  data: [{
      itemID: 0,
      categories: [{
        id: 0,
        type: 'a',
        name: 'world'
      }, {
        id: 1,
        type: 'b',
        name: 'plants'
      }]
    },
    {
      itemID: 1,
      categories: [{
        id: 2,
        type: 'w',
        name: 'cars'
      }, {
        id: 3,
        type: 't',
        name: 'bicycles'
      }]
    }

  ]

};
console.log([].concat
.apply([],  test.data.map(item => item.categories.map(el => el.type))));

Что я хочу сделать, это получить все типы в массиве. Таким образом, результат должен выглядеть следующим образом:

['a', 'b', 'w', 't']

Что я сделал:

[].concat
.apply([],  test.data.map(item => item.categories.map(el => el.type)))

У меня такое ощущение, что это можно сделать проще.

Кто-нибудь знает лучшее решение?

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Вы можете использовать Array.prototype.map () и Array.prototype.flat () :

Метод flat() создает новый массив со всеми элементами вложенного массива, рекурсивно объединенными в него до заданной глубины.

Где Глубина равна Необязательно

Уровень глубины, определяющий, насколько глубоко структура вложенного массива должна быть сглажена. По умолчанию 1.

var test = {
  data: [{
      itemID: 0,
      categories: [{
        id: 0,
        type: 'a',
        name: 'world'
      }, {
        id: 1,
        type: 'b',
        name: 'plants'
      }]
    },
    {
      itemID: 1,
      categories: [{
        id: 2,
        type: 'w',
        name: 'cars'
      }, {
        id: 3,
        type: 't',
        name: 'bicycles'
      }]
    }

  ]

};

var type = test.data.map(item => item.categories.map(el => el.type)).flat();
console.log(type);
0 голосов
/ 31 октября 2018

Использование Array.reduce

var test = {data: [{itemID: 0,categories: [{id: 0,type: 'a',name: 'world'}, {id: 1,type: 'b',name: 'plants'}]},{itemID: 1,categories: [{id: 2,type: 'w',name: 'cars'}, {id: 3,type: 't',name: 'bicycles'}]}]};

let result = test.data.reduce((a,c) => a.concat(c.categories.map(v => v.type)), []);
console.log(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...