Обход многомерного массива с задержкой после каждого цикла
Здравствуйте
Уже несколько дней бьюсь над задачей обхода многомерного массива, с задержкой после каждого цикла. Сделать обход простого массива с задержкой - получается. Сделать обход многомерного массива без задержки - получается. А вот объединить два подхода в одном - не получается. Примеры: Обход массива с задержкой 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, время: 07:01. |