У меня есть этот массив массивов:
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 ', но я не понимаю, как это сделать. Спасибо за помощь.
надеюсь, это поможет
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);
Вы можете использовать reduce. Внутри функции обратного вызова проверьте, есть ли у аккумулятора ключ. Если нет, создайте ключ и добавьте к нему значение
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))
Надеюсь, это вам поможет, я заменил значения строкой, чтобы получить минимальное решение.
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);