j
( MDN , spec ) является мутаторным методом: он изменяет состояние массива, на который вы его вызываете. Поэтому, естественно, inArr
изменяется arr
(в вашем первом примере), так как i
и arr
оба относятся к одному и тому же массиву.
Возможно, стоит отметить, что pop
он не принимает никаких параметров, поэтому 1
ничего не делает.
В вашем первом примере лучше всего просто назначить другую переменную (скажем, j
) начальное значение и использовать для получения значения, а затем уменьшить по мере увеличения . (Кроме того, нет смысла , и вам нужно объявить, чтобы избежать того, что я называю «Ужасом неявных глобалов» :function reverseArray (arr) { var newArr = []; for (var i = 0, j = arr.length - 1; i < arr.length; i++, j--) { newArr[i] = arr[j]; } return newArr; } console.log(reverseArray(["A", "B", "C", "D", "E", "F"]));
arr[arr.length - i - 1]
j
i
function reverseArray (arr) { var newArr = []; for (var i = 0; i < arr.length; i++) { newArr[i] = arr[arr.length - i - 1]; } return newArr; } console.log(reverseArray(["A", "B", "C", "D", "E", "F"]));
i
function reverseArray(array) {
var newArr = [],
inArr = array.slice(); // take copy of primitive values
while (inArr.length) { // check decrementing length
newArr.push(inArr.pop());
}
return newArr;
}
console.log(reverseArray(["A", "B", "C", "D", "E", "F"]));
Вы также можете использовать for
вместо второй переменную:
function reverseArray(array) {
var newArr = [],
inArr = array.slice(); // take copy of primitive values
for(; inArr.length; ) { // check decrementing length
newArr.push(inArr.pop());
}
return newArr;
}
console.log(reverseArray(["A", "B", "C", "D", "E", "F"]));