Отфильтровать уникальное поле и вставить в массив из массива объектов - PullRequest
0 голосов
/ 29 июня 2018

Я хочу следующее решение, я пробовал с подчеркиванием, groupBy, но оно возвращает объект массивов с уникальным именем внутри массива, но я не хочу это решение, я хочу что-то вроде показанного ниже Как конвертировать это:

[
    {food: 'apple', type: 'fruit'},
    {food: 'potato', type: 'vegetable'},
    {food: 'apple', type: 'fruit'},
    {food: 'apple', type: 'fruit'},
    {food: 'potato', type: 'vegetable'},
]

в это:

[
    [ {food: 'apple', type: 'fruit'}, 
      {food: 'apple', type: 'fruit'}, 
      {food: 'apple', type: 'fruit'}]
    ],
    [ {food: 'potato', type: 'vegetable'}, 
      {food: 'potato', type: 'vegetable'}
    ]
]

с использованием JavaScript или подчеркивания, Пожалуйста, помогите мне сделать это с помощью функции JavaScript, заранее спасибо

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Вы можете использовать Array.prototype.reduce amd, а затем отображать значения

const array = [
    {food: 'apple', type: 'fruit'},
    {food: 'potato', type: 'vegetable'},
    {food: 'apple', type: 'fruit'},
    {food: 'apple', type: 'fruit'},
    {food: 'potato', type: 'vegetable'},
];

let data = array.reduce((prev, curr) => {
  if (curr.food in prev) {
    prev[curr.food].push(curr);
  } else {
    prev[curr.food] = [curr];
  }
  return prev;
}, {});
data = Object.keys(data).map(key => data[key]);
console.log(data);
0 голосов
/ 29 июня 2018

Вы можете использовать уменьшить , чтобы получить группы на карте, а затем получить разрушенные значения ()

const d = [
  {food: 'apple', type: 'fruit'},
  {food: 'potato', type: 'vegetable'},
  {food: 'apple', type: 'fruit'},
  {food: 'apple', type: 'fruit'},
  {food: 'potato', type: 'vegetable'},
];
const groupBy = 'food'; // change to whatever key you want to group by
const res = [...d.reduce((a,b) => a.set(b[groupBy], (a.get(b[groupBy]) || []).concat(b)), new Map).values()];
console.log(res);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...