Обход многомерного массива с задержкой после каждого цикла
Здравствуйте
Уже несколько дней бьюсь над задачей обхода многомерного массива, с задержкой после каждого цикла. Сделать обход простого массива с задержкой - получается. Сделать обход многомерного массива без задержки - получается. А вот объединить два подхода в одном - не получается. Примеры: Обход массива с задержкой 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); Есть понимание, что надо первый пример развить до трех вложенных функций с задержками, но у меня от вложенности такая каша получается, что и не работает, и не разобраться почему. Буду признателен, если кто-то напишет готовый код. |
Цитата:
Как вариант... <!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> |
Спасибо, очень компактный код!
|
Часовой пояс GMT +3, время: 00:15. |