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

195
06 декабря 2021, 07:20

У меня допустим 3 объекта

{ id: 1, group: 1, sub: 0, }

Сейчас я использую

var a = names.reduce((acc, c) => ((acc[c.group] ? acc[c.group].push(c) : acc[c.group] = [c]), acc), {});

Т.е сейчас массив группируется исходя только из поля group, я не понимаю как сделать, что бы он группировал по условию. Если sub не пусто - он создает группу с именем саб, если саб пусто то он выполняет то что уже написано(группирует по group)

Answer 1

let names = [ 
  { id: 1, group: 1, sub: 0, },   
  { id: 2, group: 1, sub: 5, },   
  { id: 3, group: 2, sub: 0, }, 
]; 
 
var a = names.reduce((acc, c) => { 
  var grp = c.sub || c.group; 
  acc[grp] ? acc[grp].push(c) : (acc[grp] = [c]); 
  return acc; 
}, {}); 
 
console.log( a );

READ ALSO
Фиксация одного из блоков на странице

Фиксация одного из блоков на странице

Есть один основной блок, он делиться на два других

240
Каким способом решить эту задачу?

Каким способом решить эту задачу?

В метод даю массив который состоит из нечетных(четных) чисел, но 1 из чисел четный(нечетный) в каждом массивеМетод должен вернуть единственное...

186
Как обратится к классу, который находится внутри другого класса

Как обратится к классу, который находится внутри другого класса

Доброе утро!) Подскажите пожалуйста, у меняproduct__item используется в нескольких блоках, как указать в js, что добавлять класс нужно лишь тому у кого...

184