Приветствую!
Подскажите пожалуйста, как можно перебирать массив каждые 3 элемента. У меня есть массив var arr = [[1, 2, 3, 4, 5, 6, 7, 8, 9]] Мне нужно через for вывести так:
Первый: 1, 2, 3.
Второй: 4, 5, 6.
Третий: 7, 8, 9.
Я сделал все через такой перебор:
for( var i = 0; i < 3; i++){
for( var j = 0; j < 3; j++){
console.log(arr[i][j]);
}
}
и так три раза, увеличивая i и j на 3. Как это можно автоматизировать, что бы не 3 раза выводить for. Большое всем спасибо за ответы! А если у меня есть такой массив:
arr = [
[1, 2, 3, 4, 5, 6, 7, 8, 9],
[1, 2, 3, 4, 5, 6, 7, 8, 9],
[1, 2, 3, 4, 5, 6, 7, 8, 9]
]
И мне необходимо найти первые три индекса каждого значения, что бы получилось так: [1,2,3,1,2,3,1,2,3],[4,5,6,4,5,6,4,5,6] и тд. Как это можно сделать? Заранее большое спасибо!
Вот как можно это сделать:
var arr = [[1, 2, 3, 4, 5, 6, 7, 8, 9], [12, 3, 4, 11, 4, 5, 6, 7]];
var tmp_arr = [];
var arr_3 = [];
for(var j=0; j<arr.length;j++){
arr_3[j] = [];
for( var i = 0; i < arr[j].length; i=i+3){
tmp_arr = [];
tmp_arr.push(arr[j][i]);
if(typeof arr[j][i+1] != 'undefined'){
tmp_arr.push(arr[j][i+1]);
}
if(typeof arr[j][i+2] != 'undefined'){
tmp_arr.push(arr[j][i+2]);
}
arr_3[j].push(tmp_arr);
}
}
console.log(arr_3);
Вот второй вариант после вашего обновления вопроса:
let arr = [[1, 2, 3, 4, 5, 6, 7, 8, 9], [12, 3, 4, 11, 4, 5, 6, 7]];
let subarr_count = 3;
function new_arr(arr, subarr_count){
let tmp_arr = [];
let arr_3 = [];
for(var j=0; j<arr.length;j++){
let ar_count = Math.floor(arr[j].length/subarr_count);
arr_3[j] = [];
tmp_arr = [];
tmp_arr.push(arr[j][0]);
if(typeof arr[j][1] != 'undefined'){
tmp_arr.push(arr[j][1]);
}
if(typeof arr[j][2] != 'undefined'){
tmp_arr.push(arr[j][2]);
}
for(var i=0; i<ar_count; i++){
arr_3[j].push(tmp_arr);
}
}
return arr_3;
}
console.log(new_arr(arr, subarr_count));
Вот так будет работать на разное кол-во
var array = [1, 2, 3, 4, 5, 6, 7, 8];
function breakUp(array){
for (var i = 0; i < array.length; i += 3) {
console.log(array.slice(i, i + 3));
}
}
breakUp(array);
Насколько я понял, внутренних массивов может быть сколько угодно, поэтому я немного усложнил входной массив.
var arr1 = [
[1, 2, 3, 4, 5, 6, 7, [8, [9, 10]]],
[11, 12, [13, [14,15]]]
];
function getArray(arr, num) {
var result = [];
var i = 0;
var calculateArr = function(arr) {
arr.forEach(function(item) {
if (Array.isArray(item)) {
calculateArr(item);
} else {
let reminder = Math.floor(i / num);
if (!result[reminder]) {
result[reminder] = [];
}
result[reminder].push(item);
i++;
}
});
}
calculateArr(arr);
return result;
}
console.log('arr1 = ' + JSON.stringify(getArray(arr1, 3)));
var arr2 = [[1, 2, 3, 4, 5, 6, 7, 8, 9]]
console.log('arr2 = ' + JSON.stringify(getArray(arr2, 3)));
После обновления вопроса решение приняло следующий вид:
var arr = [
[1, 2, 3, 4, 5, 6, 7, 8, 9],
[1, 2, 3, 4, 5, 6, 7, 8, 9],
[1, 2, 3, 4, 5, 6, 7, 8, 9]
];
function getNewArr(arr) {
let result = [];
arr.forEach(function(innerArr) {
innerArr.forEach(function(item, i) {
let reminder = Math.floor(i / 3);
if (!result[reminder]) {
result[reminder] = [];
}
result[reminder].push(item);
});
});
return result;
}
console.log(JSON.stringify(getNewArr(arr)));
Если просто вывести данные.
var arr = [[1, 2, 3, 4, 5, 6, 7, 8, 9], [11, 12, 13, 14, 15, 16, 17, 18, 19]],
length = 3,
test = document.getElementById('test');
function display() {
arr.forEach(item => {
for(var i = 0; i < item.length; i++) {
test.insertAdjacentHTML('beforeend', ( !i || i % length ? " ": "<br/>") + item[i])
}
test.insertAdjacentHTML('beforeend', "<br/>")
})
}
display();
<div id="test"></div>
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости