Как указано, вы можете использовать реверс.Но чтобы ответить на ваш вопрос о том, почему это не работает: вы изменяете массив так, что цикл forEach завершается раньше.
Таким образом, одним из решений будет:
- Донне изменяйте массив, который вы просматриваете
- Получите последний элемент из oldArray и добавьте его в newArray
- Затем второй последний элемент из oldArra и добавьте его в newArray
и т. Д.
Мы знаем, что мы можем получить последний элемент из массива с помощью
var lastItem = myArray[myArray.length-1]
Таким образом, чтобы получить второй последний элемент, мы должны сделать
var secondLastItem = myArray[myArray.length-2]
Мы все еще можем использовать метод forEach, так как обратный вызов имеет несколько параметров, таких как текущий элемент и текущий индекс.
Поэтому, когда вы просматриваете массив, первый индекс равен 0, в следующий раз, когдаиндекс становится равным 1 и т. д.
Теперь у нас есть что-то, что увеличивается при продолжении цикла, и мы можем вычесть 1, затем вычесть 2, затем вычесть 3 и т. д.
Таким образом, наше решение может выглядеть следующим образомэто;
var arrayA = ["h","e","l","l","o"];
var arrayB = [];
function copyArray(oldArray, newArray) {
oldArray.forEach(function(item,index) {
newArray.push(oldArray[oldArray.length-1-index]);
});
console.log(oldArray + " old array");
console.log(newArray + " new array");
}
copyArray(arrayA, arrayB);