Jquery Объединить массив массивов в другой массив массивов - PullRequest
0 голосов
/ 18 июня 2020

У меня есть этот массив массивов:

arr = [[1,a],[1,b],[2,c],[2,d],[3,e],[3,f]];

... и я хотел бы преобразовать его в это:

arr = [[1,a,b],[2,c,d],[3,e,f]];

Я думаю, это с 'для l oop ', но я не понимаю, как это сделать. Спасибо за помощь.

Ответы [ 3 ]

0 голосов
/ 18 июня 2020

надеюсь, это поможет

arr = [[1,'a'],[1,'b'],[2,'c'],[2,'d'],[3,'e'],[3,'f']];


	const newArr = arr.reduce((acc, cur) => {
	const prev = acc.find(elem => elem[0] === cur[0]);

    if(prev) {
        prev[1] += ", " + cur[1];
    } 
    else {
        acc.push(cur);
    }
    return acc;
	}
	, []);

console.log(newArr);
0 голосов
/ 18 июня 2020

Вы можете использовать reduce. Внутри функции обратного вызова проверьте, есть ли у аккумулятора ключ. Если нет, создайте ключ и добавьте к нему значение

let arr = [
  [1, 'a'],
  [1, 'b'],
  [2, 'c'],
  [2, 'd'],
  [3, 'e'],
  [3, 'f']
];

let data = arr.reduce((acc, curr) => {

  if (!acc[curr[0]]) {
    acc[curr[0]] = [];
  }
  curr.forEach((item) => {
    if (acc[curr[0]].indexOf(item) === -1) {
      acc[curr[0]].push(item);
    }
  })
  return acc;
}, {});
console.log(Object.values(data))
0 голосов
/ 18 июня 2020

Надеюсь, это вам поможет, я заменил значения строкой, чтобы получить минимальное решение.

let arr = [[1,'a'],[1,'b'],[2,'c'],[2,'d'],[3,'e'],[3,'f']];

arr.forEach(function(key, index){
  key.push(arr[index+1][1]);
  arr.splice(index+1, 1);
});

console.log(arr);
...