Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.08.2017, 15:16
Интересующийся
Отправить личное сообщение для Walk Посмотреть профиль Найти все сообщения от Walk
 
Регистрация: 14.08.2017
Сообщений: 28

Обход многомерного массива с задержкой после каждого цикла
Здравствуйте

Уже несколько дней бьюсь над задачей обхода многомерного массива, с задержкой после каждого цикла.

Сделать обход простого массива с задержкой - получается. Сделать обход многомерного массива без задержки - получается. А вот объединить два подхода в одном - не получается.

Примеры:

Обход массива с задержкой 1с:

function go(scenario) {
        var i = 0,
            timer = setInterval(
                function() {
                    if (i < scenario.length) {
                        console.log('User: ' + scenario[i].user);
                        i++;
                    }
                    else{
                        clearInterval(timer);
                    }
                },
                1000
            );
    }

    var scenario = [
        {
            'user': 'user1'
        },
        {
            'user': 'user2'
        },
        {
            'user': 'user3'
        }

    ];

    window.onload=function(){
        go(scenario);
    }


Обход многомерного массива без задержки:

var a = [ // общий массив
        [ // массив stroke
            [ // массив этапов
                {
                    'user_id': 1
                },
                {
                    'user_id': 2
                }
            ],
            [
                {
                    'user_id': 1
                },
                {
                    'user_id': 2
                }
            ],
            [
                {
                    'user_id': 1
                },
                {
                    'user_id': 2
                }
            ],
            [
                {
                    'user_id': 1
                },
                {
                    'user_id': 2
                }
            ]
        ],
        [ // массив stroke
            [ // массив этапов
                {
                    'user_id': 1
                },
                {
                    'user_id': 2
                }
            ],
            [
                {
                    'user_id': 1
                },
                {
                    'user_id': 2
                }
            ],
            [
                {
                    'user_id': 1
                },
                {
                    'user_id': 2
                }
            ],
            [
                {
                    'user_id': 1
                },
                {
                    'user_id': 2
                }
            ]
        ]
    ];

    function go(a) {
        i = 0;
        while (i < a.length) {
            j = 0;
            while (j < a[i].length) {
                n = 0;
                while (n < a[i][j].length) {
                    console.log('Ход: ' + i + ' Эпизод: ' + j + ' Объект: ' + n);
                    n++;
                }
                j++;
            }
            i++;
        }
    }
    go(a);


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

Буду признателен, если кто-то напишет готовый код.
Ответить с цитированием
  #2 (permalink)  
Старый 14.08.2017, 15:43
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,210

Сообщение от Walk
Есть понимание, что надо первый пример развить до трех вложенных функций с задержками
Отнюдь.

Как вариант...
<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<!--
<script src='https://code.jquery.com/jquery-latest.js'></script>
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
-->
<style type='text/css'>
</style>
<script type='text/javascript'>
var a = [ // общий массив
	[ // массив stroke
		[ // массив этапов
			{
				'user_id': 1
			},
			{
				'user_id': 2
			}
		],
		[
			{
				'user_id': 1
			},
			{
				'user_id': 2
			}
		],
		[
			{
				'user_id': 1
			},
			{
				'user_id': 2
			}
		],
		[
			{
				'user_id': 1
			},
			{
				'user_id': 2
			}
		]
	],
	[ // массив stroke
		[ // массив этапов
			{
				'user_id': 1
			},
			{
				'user_id': 2
			}
		],
		[
			{
				'user_id': 1
			},
			{
				'user_id': 2
			}
		],
		[
			{
				'user_id': 1
			},
			{
				'user_id': 2
			}
		],
		[
			{
				'user_id': 1
			},
			{
				'user_id': 2
			}
		]
	]
];
var i=0,j=0,k=0,tmo=1000;
setTimeout(test,tmo);
function test(){
	if (!a[i]) {
		return;
	};
	document.getElementById('txt').innerHTML=i+','+j+','+k+'='+a[i][j][k]['user_id'];
	++k;
	if (!a[i][j][k]) {
		++j;
		k=0;
	};
	if (!a[i][j]) {
		++i;
		j=0;
	};
	setTimeout(test,tmo);
};
</script>
</head>
<body>
<p id='txt'></p>
</body>
</html>
Ответить с цитированием
  #3 (permalink)  
Старый 14.08.2017, 16:17
Интересующийся
Отправить личное сообщение для Walk Посмотреть профиль Найти все сообщения от Walk
 
Регистрация: 14.08.2017
Сообщений: 28

Спасибо, очень компактный код!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переход на url после окончания цикла vas88811 Events/DOM/Window 16 21.12.2013 12:44
Создание списка из полей и ключей многомерного массива IntegralAL Events/DOM/Window 13 06.12.2013 17:01
Как изменять свойства каждого элемента массива? Astrey Элементы интерфейса 3 26.06.2013 10:59
прошу вас напишите JavaScript: объявления после каждого суббота Qartvela™ Общие вопросы Javascript 13 14.10.2012 11:23
Обход массива в строгом порядке nibble Общие вопросы Javascript 35 03.12.2010 13:38