@partizzend

Как сгруппировать элементы вложенных массивов по заголовкам?

Есть массив:

var ind = ["Apple", "Pear", "Banana"];

И еще один массив:

let arr = [
  [ "Pear",        12,       34,     54,     76,      23,      232    ],
  [ "Apple",      54,       22,     11,     23,      21,      33      ],
  [ "Banana",   54,       65,     11,     43,      66,      75      ],
  [ "Pear",        23,       11,     46,     76,      33,      98      ],
  [ "Apple",      12,       34,     54,     76,      23,      232    ],
  [ "Banana",   54,       22,     11,     23,      21,      33      ],
];


Как объединить все значения подмассивов по порядку, как они идут в массиве ind, чтобы сделать это так:

let arr = [
  ["Apple",    [54,12], [22,34], [11,54], [23,76], [21,23], [33,232]],
  ["Pear",      [12,23], [34,11], [54,46], [76,76], [23,33], [232,38]],
  ["Banana", [54,54], [65,22], [11,11], [43,23], [66,21], [75,33 ]]
];


Т. е. сначала объеденить в подмассивы значения массивов, в кот. первое значение Apple, потом Pear, потом Banana. Как в массиве var ind = ["Apple", "Pear", "Banana"];

Результат может быть таким как выше, может и быть таким как ниже:

let arr = [
  [[54,12], [22,34], [11,54], [23,76], [21,23], [33,232]],
  [[12,23], [34,11], [54,46], [76,76], [23,33], [232,38]],
  [[54,54], [65,22], [11,11], [43,23], [66,21], [75,33 ]]
];


Очень желательно без таких вещей как Spread syntax (...) и Object.values(), так как нужно чтобы работало хотя бы в последнем ie
  • Вопрос задан
  • 92 просмотра
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
ind.map(((data, n) => data[n]).bind(null, arr.reduce((acc, row) => {
  const d = acc[row[0]];
  row.forEach((n, i) => i && (d[i] = d[i] || []).push(n));
  return acc;
}, ind.reduce((acc, n) => (acc[n] = [ n ], acc), {}))))
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
от 110 000 до 150 000 руб.
Александрия Москва
от 200 000 до 250 000 руб.
Foodtronics Москва
от 100 000 до 200 000 руб.