вместо того, чтобы при каждой итерации заменять значение строки, этот код меняет ее ОДИН РАЗ, в самом конце. и это не вопрос про асинхронную функцию, которая выполняет последнюю итерацию много раз, если что.
function changeVal(){
setTimeout(function(){
elem.innerHTML = myArr;
}, 3000);
}
changeVal();
полностью код выглядит вот так:
var myArr = [9, 9, 8, 4];
var newArr = [];
var elem = document.getElementById("myArray");
elem.innerHTML = myArr;
function counter() {
var max = 10;
var min = 1;
var end = 10;
for (var i = myArr[3]; i <= max; i++) {
/приравниваем временную переменную к "i", чтобы работать
со значением "i" не влияя на цикл/
var temp = i;
/полученное значение вставляем в новый массив/
function pusher(val) {
newArr.push(val);
}
pusher(temp);
/получаем строку из цифры в массиве, чтобы в последствии применить метод split для
двузначных чисел и десятки отправить в следующий разряд данного нам массива, а единицы
оставить/
var string1 = newArr.join('');
/разделяем, если есть что разделять/
newArr = string1.split('');
/если длина newArr больше 1, то есть полученное число двузначное/
if (newArr.length > 1) {
/то берем второй элемент массива (еденицы, который будет равен нолю) и превращаем его из строки в цифру/
temp = parseInt(newArr[1]);
/вырезаем четвертый (последний) элемент данного массива и заменяем его значением temp, добиваясь таким образом обнуления разряда единиц после 9/
myArr.splice(3, 1, temp);
/если длина массива равна единице,/
} else {
/* то, обнуляем значение newArr и /
newArr = [];
myArr.splice(3, 1, i);
}
/заменяем данный массив на странице новым массивом с новыми данными/
function changeVal() {
setTimeout(function() {
elem.innerHTML = myArr;
}, 3000);
}
changeVal();
if (i == max && myArr[0] !== max) {
newArr = [];
myArr[2]++;
var tempi = myArr[2];
pusher(tempi);
var string2 = newArr.join('');
newArr = string2.split('');
if (newArr.length > 1) {
tempi = parseInt(newArr[1]);
myArr.splice(2, 1, tempi);
} else {
newArr = [];
myArr.splice(2, 1, tempi);
i = 0;
}
elem.innerHTML = myArr;
if (i == max && myArr[0] !== max) {
newArr = [];
myArr[1]++;
var tempo = myArr[1];
pusher(tempo);
var string3 = newArr.join('');
newArr = string3.split('');
if (newArr.length > 1) {
tempo = parseInt(newArr[1]);
myArr.splice(1, 1, tempo);
} else {
newArr = [];
myArr.splice(1, 1, tempo);
i = 0;
}
myArr[2] = 0;
elem.innerHTML = myArr;
if (i == max && myArr[0] !== max) {
newArr = [];
myArr[0]++;
var tempa = myArr[0];
pusher(tempa);
var string4 = newArr.join('');
newArr = string4.split('');
if (newArr.length > 1) {
tempa = parseInt(newArr[1]);
myArr.splice(0, 1, tempa);
} else {
newArr = [];
myArr.splice(0, 1, tempa);
i = 0;
}
myArr[1] = 0;
myArr.unshift(1);
elem.innerHTML = myArr;
}
}
} else if (myArr[0] == max /&& myArr[1]==max*/ ) {
break;
}
};
}
counter();
<div id="myArray">start</div>
Он не оптимизирован, конечно, но, поскольку я новичок, для меня уже счастье, что он что-то делает.))
var myArr = [9, 9, 8, 4];
var newArr = [];
var elem = document.getElementById("myArray");
elem.innerHTML = myArr;
function counter() {
var max = 10;
var min = 1;
var end = 10;
var changeValCounter = 0;
for (var i = myArr[3]; i <= max; i++) {
/приравниваем временную переменную к "i", чтобы работать
со значением "i" не влияя на цикл/
var temp = i;
/полученное значение вставляем в новый массив/
function pusher(val) {
newArr.push(val);
}
pusher(temp);
/получаем строку из цифры в массиве, чтобы в последствии применить метод split для
двузначных чисел и десятки отправить в следующий разряд данного нам массива, а единицы
оставить/
var string1 = newArr.join('');
/разделяем, если есть что разделять/
newArr = string1.split('');
/если длина newArr больше 1, то есть полученное число двузначное/
if (newArr.length > 1) {
/то берем второй элемент массива (еденицы, который будет равен нолю) и превращаем его из строки в цифру/
temp = parseInt(newArr[1]);
/вырезаем четвертый (последний) элемент данного массива и заменяем его значением temp, добиваясь таким образом обнуления разряда единиц после 9/
myArr.splice(3, 1, temp);
/если длина массива равна единице,/
} else {
/* то, обнуляем значение newArr и /
newArr = [];
myArr.splice(3, 1, i);
}
/заменяем данный массив на странице новым массивом с новыми данными/
function changeVal(myArr) {
setTimeout(function() {
elem.innerHTML = myArr;
}, ++changeValCounter 1000);
}
changeVal(myArr.slice());
if (i == max && myArr[0] !== max) {
newArr = [];
myArr[2]++;
var tempi = myArr[2];
pusher(tempi);
var string2 = newArr.join('');
newArr = string2.split('');
if (newArr.length > 1) {
tempi = parseInt(newArr[1]);
myArr.splice(2, 1, tempi);
} else {
newArr = [];
myArr.splice(2, 1, tempi);
i = 0;
}
elem.innerHTML = myArr;
if (i == max && myArr[0] !== max) {
newArr = [];
myArr[1]++;
var tempo = myArr[1];
pusher(tempo);
var string3 = newArr.join('');
newArr = string3.split('');
if (newArr.length > 1) {
tempo = parseInt(newArr[1]);
myArr.splice(1, 1, tempo);
} else {
newArr = [];
myArr.splice(1, 1, tempo);
i = 0;
}
myArr[2] = 0;
elem.innerHTML = myArr;
if (i == max && myArr[0] !== max) {
newArr = [];
myArr[0]++;
var tempa = myArr[0];
pusher(tempa);
var string4 = newArr.join('');
newArr = string4.split('');
if (newArr.length > 1) {
tempa = parseInt(newArr[1]);
myArr.splice(0, 1, tempa);
} else {
newArr = [];
myArr.splice(0, 1, tempa);
i = 0;
}
myArr[1] = 0;
myArr.unshift(1);
elem.innerHTML = myArr;
}
}
} else if (myArr[0] == max /&& myArr[1]==max/ ) {
break;
}
};
}
counter();
<div id="myArray">start</div>
function changeVal(myArr){ ... } ... changeVal(myArr.slice());только вряд ли Вы это увидите:setTimeout(..., i * 3000);– Dec 27 '17 at 17:23setTimeout. Все Ваши таймауты выполнятся через три секунды после цикла с одной и той же переменнойmyArr. – Dec 27 '17 at 18:30