@lockwise

Как привести группу объектов к массиву?

Есть исходный объект:

var json = {
  results: [
    {
      name: 'Name1',
      volume: 1,
      lists: [
        {
          list: 1,
          tags: ['hello', 'world']
        },
        {
          list: 2,
          tags: ['hello']
        }
      ]
    },
    {
      name: 'Name2',
      volume: 2,
      lists: [
        {
          list: 1,
          tags: ['world']
        },
        {
          list: 2,
          tags: ['hello', 'internet']
        }
      ]
    }
  ]
};

Нужно привести к массиву объектов по всем тегам:

var array = [
  {
    volume: 1,
    list: 1,
    tags: 'hello'
  },
  {
    volume: 1,
    list: 1,
    tags: 'world'
  },
  {
    volume: 1,
    list: 2,
    tags: 'hello'
  },
  {
    volume: 2,
    list: 1,
    tags: 'world'
  },
  {
    volume: 2,
    list: 2,
    tags: 'hello'
  },
  {
    volume: 2,
    list: 2,
    tags: 'internet'
  }
];

Но, расположение в исходном объекте может меняться, поэтому желательно использовать какую-то dot-object библиотеку, чтобы задать только results.*.lists.*.tags.* и вывело все совпадения в строку.

Уверен, что нужная библиотека существует, не могу найти.
  • Вопрос задан
  • 199 просмотров
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
json.results.map(({ lists, volume }) => {
  return lists.map(({ tags, list }) => {
    return tags.map(tag => ({ volume, list, tag }));
  });
}).flat(2)
Ответ написан
lastuniverse
@lastuniverse
Всегда вокруг да около IT тем
var parse = (arr)=>arr.reduce((a,b)=>b.lists.forEach(c=>c.tags.forEach(d=>a.push({tags:d,volume:b.volume,list:c.list})))||a,[]);

var array = parse(json.results);

console.log(array);


на выходе:

[ { tags: 'hello', volume: 1, list: 1 },
  { tags: 'world', volume: 1, list: 1 },
  { tags: 'hello', volume: 1, list: 2 },
  { tags: 'world', volume: 2, list: 1 },
  { tags: 'hello', volume: 2, list: 2 },
  { tags: 'internet', volume: 2, list: 2 } ]

Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы