geometria
@geometria

Как разбить массив на массивы?

Задача: создать новый подмассив, если значение = 1
т.е. массив [1, 2, 1, 2, 3, 1, 1, 2, 3]
привести к виду [[1, 2], [1, 2, 3], [1], [1, 2, 3]]

если делаю так:

var a = [1, 2, 1, 2, 3, 1, 1, 2, 3];
var d = {};

a.forEach(function(value){
   if(typeof d[value] == 'undefined')
       d[value] = [];

   d[value].push(value);
});

console.log(d);


получаю отдельные массивы:
1: (4) [1, 1, 1, 1]
2: (3) [2, 2, 2]
3: (2) [3, 3]

А как правильно?
  • Вопрос задан
  • 86 просмотров
Решения вопроса 1
YuriyVorobyov1333
@YuriyVorobyov1333
Software Developer (Java/Node.js/Angular)
Через for:
const a = [1, 2, 1, 2, 3, 1, 1, 2, 3];
const d = [];

for (let i = 0; i < a.length; i++) {
  a[i] === 1 ? d.push([1]) : d[d.length - 1].push(a[i]);
}

console.log(d); // [ [ 1, 2 ], [ 1, 2, 3 ], [ 1 ], [ 1, 2, 3 ] ]

Через map (или forEach):
const a = [1, 2, 1, 2, 3, 1, 1, 2, 3];
const d = [];

a.map(el => {
  el === 1 ? d.push([1]) : d[d.length - 1].push(el);
});

console.log(d);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
0xD34F
@0xD34F Куратор тега JavaScript
arr.reduce((acc, n, i) => (
  (!i || n === 1) && acc.push([]),
  acc[acc.length - 1].push(n),
  acc
), [])
Ответ написан
Ваш ответ на вопрос

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

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