Как сгруппировать массив объектов следующим образом?И удалить дубликаты? - PullRequest
0 голосов
/ 07 октября 2018

Я пишу небольшой фрагмент кода JS с массивом:

[
 { title: 'title1', id: 1 },
 { title: 'title1', id: 2 },
 { title: 'title2', id: 3},
 { title: 'title2', id: 4}
]

Мне нужно что-то вроде этого, однако:

"queried": {
    "title1": [1, 2],
    "title2": [3, 4],
 }

Я пытаюсь сделать это с Lodashс _.groupBy(array, "title") но я получаю:

{ 
 title1:[
  { title: 'title1', id: 1 },
  { title: 'title1', id: 2 }
],
 title2:[
  { title: 'title2', id: 3 },
  { title: 'title2', id: 4 }
],
}

Как это исправить пожалуйста?

Ответы [ 2 ]

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

Это также можно сделать без lodash через ES6 и reduce, например, так:

var arr = [{ title: 'title1', id: 1 }, { title: 'title1', id: 2 }, { title: 'title2', id: 3 }, { title: 'title2', id: 4 } ]

const r = arr.reduce((r, {title, id}) => 
   (r[title] = [...r[title] || [], id], r), {})

console.log(r)
0 голосов
/ 07 октября 2018

Используйте _.mapValues() для итерации групп и _.map() для извлечения значений идентификаторов:

const lol = [{"title":"title1","id":1},{"title":"title1","id":2},{"title":"title2","id":3},{"title":"title2","id":4}];
  
const result = _.mapValues(
  _.groupBy(lol, 'title'),
  v => _.map(v, 'id')
);

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
...