@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
  • Вопрос задан
  • 146 просмотров
Решения вопроса 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), {}))))
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы