Как разбить массив на несколько массивов js
Можно использовать метод reduce() для разделения исходного массива на несколько массивов, основываясь на некотором условии.
Пример. Разделим массив чисел на два массива — один сочетает в себе все четные числа, а другой — все нечетные числа.
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]; const [evenNumbers, oddNumbers] = numbers.reduce( (acc, val) => acc[val % 2].push(val); return acc; >, [[], []] ); console.log(evenNumbers); // [2, 4, 6, 8] console.log(oddNumbers); // [1, 3, 5, 7, 9]
Здесь мы использовали reduce() , чтобы создать два массива внутри массива acc , один для четных чисел и другой для нечетных. Затем мы проходим по каждому числу в исходном массиве и добавляем его в соответствующий массив внутри acc на основе остатка от деления на 2.
Затем мы деструктурируем результат reduce() в две переменные evenNumbers и oddNumbers , чтобы получить два отдельных массива, содержащих только четные и нечетные числа соответственно.
26 сентября 2022
Для того что бы получить «срез» массива, можно воспользоваться встроенным методом slice
const nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; console.log(nums.slice(3)); // Вывод: [ 4, 5, 6, 7, 8, 9, 10 ] console.log(nums.slice(2, 6)); // Вывод: [ 3, 4, 5, 6 ] console.log(nums.slice(-2)); // Вывод: [ 9, 10 ] console.log(nums.slice()); // Вывод: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Для того чтобы «нарезать» массив на одинаковые части, можно воспользоваться методом chunk из библиотеки lodash:
_.chunk(['a', 'b', 'c', 'd'], 2); // Вывод: [['a', 'b'], ['c', 'd']] _.chunk(['a', 'b', 'c', 'd'], 3); // Вывод: [['a', 'b', 'c'], ['d']]
Разбить массив на подмассивы
Как разбить массив на подмассивы одинаковой длины?
Доброго всем времени суток! Задача стоит вот в чем: В матлабе нужно разделить массив длинной 27060.
Массив содержит нулевые элементы, разделяющие массив на подмассивы. Как сделать что бы разделяло не с 0 а с допустим с 5
#include <iostream> using namespace std; int main() < const int n(17); int arr =.
Массив и подмассивы
В целочисленном массиве X(n) имеется единственный нулевой элемент, разделяющий его на две части. В.
Объединить подмассивы в массив
Здравствуйте! У меня есть функция, результат которой выводится в виде трехмерного массива. Мне.
Массив: вывести в подмассивы по дням
Приветствую. Помогите решить проблему. Есть массив, который преобразовывается в JSON: .
Как разбить массив на подмассивы?
Допустим, есть массив из 233 элементов: [<>,<>,<>. <>] ; Как разбить такой массив на подмассивы, чтобы в каждом подмассиве было не более 100 элементов? (число элементов может меняться) Например так: [ [0-99], [100-199], [200-232] ] ;
Отслеживать
122k 24 24 золотых знака 125 125 серебряных знаков 299 299 бронзовых знаков
задан 18 окт 2017 в 6:56
73 1 1 золотой знак 1 1 серебряный знак 4 4 бронзовых знака
10 ответов 10
Сортировка: Сброс на вариант по умолчанию
Одно из решений, через цикл:
let array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; //массив, можно использовать массив объектов let size = 3; //размер подмассива let subarray = []; //массив в который будет выведен результат. for (let i = 0; i console.log(subarray);
Отслеживать
ответ дан 18 окт 2017 в 7:11
Sergey Glazirin Sergey Glazirin
5,628 5 5 золотых знаков 19 19 серебряных знаков 36 36 бронзовых знаков
const array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; const array_size = 3; const sliced_array = []; for (let i = 0; i console.log(sliced_array);
Отслеживать
ответ дан 21 мар 2019 в 15:04
PlayheadSTD PlayheadSTD
31 1 1 бронзовый знак
const array = [], result = [], length = 100; // Объявляем переменные for (let x = 1; x
Отслеживать
ответ дан 18 окт 2017 в 8:08
13.1k 2 2 золотых знака 25 25 серебряных знаков 56 56 бронзовых знаков
Разбивает массив на подмассивы размера SIZE
const s = [,,,,,]; const SIZE = 4; const res = s.reduce((p,c)=> < if(p[p.length-1].length == SIZE)< p.push([]); >p[p.length-1].push(c); return p; >, [[]]); console.log(res);
Отслеживать
ответ дан 18 окт 2017 в 7:09
2,800 9 9 серебряных знаков 22 22 бронзовых знака
Можно сделать таким образом:
// Создаем массив из 233 элементов var array = []; for (var x = 1; x var subArray = [], subIndex = -1; for (var i = 0; i < array.length; i++) < // Каждые 200 итераций меняем ключ для добавления в подмассив if (0 === i % 200) < subIndex++; >if (subArray[subIndex] === undefined) < subArray[subIndex] = []; >subArray[subIndex].push(array[i]); > console.log(subArray);
Отслеживать
ответ дан 18 окт 2017 в 7:12
1,901 8 8 серебряных знаков 13 13 бронзовых знаков
В документации буквально сказано следующее:
_.chunk(array, [size=1])
Creates an array of elements split into groups the length of size . If array can't be split evenly, the final chunk will be the remaining elements.
Отслеживать
51.6k 200 200 золотых знаков 61 61 серебряный знак 242 242 бронзовых знака
ответ дан 3 авг 2020 в 16:33
Александр Урлапов Александр Урлапов
11 2 2 бронзовых знака
а lodash при чем к вопросу?
29 ноя 2022 в 14:19
const src = [1,2,3,4,5,6,7,8,9]; const result = []; const count = 2; for (let s = 0, e = count; s < src.length; s += count, e += count) result.push(src.slice(s, e)); console.log(result)
Можно завернуть всё это в функцию:
function unflat(src, count) < const result = []; for (let s = 0, e = count; s < src.length; s += count, e += count) result.push(src.slice(s, e)); return result; >console.log(unflat([1,2,3,4,5,6,7,8,9,0], 3));
Отслеживать
ответ дан 24 авг 2021 в 11:23
11 1 1 бронзовый знак
Если в проекте есть lodash, можно использовать метод chunk
или следующею функцию
const arrayToChank = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; function chunk(arr, size) < const result = []; for (let i = 0; i < Math.ceil(arr.length/size); i++) < result.push(arr.slice((i * size), (i * size) + size)); >return result; > console.log(chunk(arrayToChank, 2));
Отслеживать
ответ дан 26 мая 2021 в 20:25
Lutogin Andrey Lutogin Andrey
31 1 1 бронзовый знак
ответ ru.stackoverflow.com/questions/732389/… про lodash и ответ ru.stackoverflow.com/a/732397/2659 про красивый slice. складываем и получаем новый ответ?
26 мая 2021 в 20:33
Можно рекурсией. Вот функция:
const arraySplitter = (arr, qtyItems) => < let countItems = 0 const lengthArr = arr.length const resultArr = [] const splitter = (arr) =>< if (countItems >= lengthArr) < return >resultArr.push(arr.slice(countItems, countItems + qtyItems)) countItems = countItems + qtyItems splitter(arr) > splitter(arr) return resultArr >
arr - массив который нужно разбить
qtyItems - количество элементов в подмассивах нового массива.
Как разбить массив на подмассивы
уже гораздо лучше. в феврале 5-й диапазон может быть весь пусто, так?
"есть массив" .
а где он есть? это реально массив в VBA?
это диапазон ячеек на листе? эти ячейки расположены в строку, в колонку?
"разбить" это как? после каждого 7-го элемента нарисовать жирную линию? куда-то и в каком-то порядке? куда и в каком?
и разбить 30 по 7 - это случайно не месяц рзбить по неделям?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
Пользователь
Сообщений: 131 Регистрация: 01.01.1970
28.09.2016 18:45:29
| Цитата |
|---|
| Сергей Беляев написал: 1 массив - 1,2,3,4,5,6,7 |
Да, так, только у меня уже есть 1 массив с 30 числами, нужно разбить его именно. Вместо чисел в подобном массиве - время начала/конца работы.
| Цитата |
|---|
| Ігор Гончаренко написал: уже гораздо лучше. в феврале 5-й диапазон может быть весь пусто, так? |
Да, в vba я значения из строки пишу в массив.
Изменено: Владимир Л - 28.09.2016 19:01:44
Пользователь
Сообщений: 131 Регистрация: 01.01.1970
28.09.2016 18:52:33
нужно заполнить табличку
У меня есть 5 одномерных массивов: с числами, с рабочими часами, ночными, началом и окончанием смены.
Прикрепленные файлы
- Безымянныйrrrrrrrrrrrrrr.png (20.24 КБ)
Изменено: Владимир Л - 28.09.2016 18:54:36
Пользователь
Сообщений: 15626 Регистрация: 10.01.2013
28.09.2016 18:55:04
ОФФ.
У Вас столбцов на весь месяц не хватает?! . Смысл в ТАКОЙ организации графика?
Согласие есть продукт при полном непротивлении сторон.
Контакты, благодарности
Пользователь
Сообщений: 131 Регистрация: 01.01.1970
28.09.2016 18:56:57
| Цитата |
|---|
| Sanja написал: есь месяц не хватает?! |
нужно со сдвигом заполнять, я в php это делал, там функция есть разбиения на подмассивы, и потом каждый подмассив выводит со сдвигом.
Пользователь
Сообщений: 131 Регистрация: 01.01.1970
29.09.2016 09:14:02
Sub main() Dim m m = q_Split(Array("раз", "два", "три"), 2) End Sub Function q_Split(arr, u&) Dim a(), aa() Dim n As Long, nn As Long, i As Long, j As Long ReDim a(UBound(arr) \ u) For i = 0 To UBound(a) For j = 0 To u - 1 If n > UBound(arr) Then Exit For Else ReDim Preserve aa(j) aa(j) = arr(n) n = n + 1 End If Next j a(i) = aa Next i q_Split = a End Function
