Как сгруппировать элементы массива на javascript

144
13 декабря 2021, 03:00

Всем привет. Допустим у нас есть массив элементов со свойствами name и ID.

  var arr = [{
    name: "Dog",
    id: "1"
  }, {
    name: "Cat",
    id: "2"
  }, {
    name: "Dog",
    id: "3"
  }, {
    name: "Cat",
    id: "4"
  }];

Необходимо сгруппировать элементы по одинаковым значениям свойства name и добавить их в виде массивов в новый массив?

На выходе должно получиться следующее:

  var new_arr = [
    [{
      "name": "Dog",
      "id": "1"
    }, {
      "name": "Dog",
      "id": "3"
    }],
    [{
      "name": "Cat",
      "id": "2"
    }, {
      "name": "Cat",
      "id": "4"
    }]
  ];

Значения свойства name динамические

Answer 1

var arr = [ 
  { name: "Dog", id: "1" }, 
  { name: "Cat", id: "2" }, 
  { name: "Dog", id: "3" }, 
  { name: "Cat", id: "4" } 
]; 
 
var map = arr.reduce((r, i) => { 
  r[i.name] = r[i.name] || []; 
  r[i.name].push(i);  
  return r; 
}, {}); 
var arr1 = []; 
for (var key in map) { 
  arr1.push(map[key]); 
} 
console.log(arr1);

READ ALSO
Как сохранить в переменной значение тега input в JavaScript?

Как сохранить в переменной значение тега input в JavaScript?

Нужно чтобы после того, как пользователь введёт своё имя и нажмёт на Enter , начиналась анимация и вместо имяПользователя было значение переменной...

222
обновление state при каждом вызове функции

обновление state при каждом вызове функции

Хочу чтобы при вызове функции onSearch - стэйт Limit принимал значение 15При попытке написать там что-то вроде this

190
как в методе отображать ИЗМЕНЕННЫЙ параметр

как в методе отображать ИЗМЕНЕННЫЙ параметр

как в методе myItem (showmyItem) отображать ИЗМЕНЕННЫЙ параметр this

154