Как работает этот массив?

211
06 апреля 2017, 20:20

var array = [1, 2, 3, 4, 5, 6, 7, 8]; 
 
for (var i = 0; i < (array.length / 2); i++) { 
  array[i] = [array[i], array[array.length - i - 1]]; 
  array[array.length - i - 1] = array[i][0]; 
  array[i] = array[i][1]; 
} 
 
console.log( array );

Народ помогите разобраться с массивом. Понимаю какой будет в итоге результат, но не понимаю как работает.

Например: array[array.length - i - 1] - Почему мы получаем здесь 8-ку? Чему здесь равняется i?
-1 - это мы отбрасываем последнюю ячейку?

Answer 1

Индекс массива начинается с нуля, т.е. первая ячейка соответствует индексу 0, последняя - 7. Длинна массива равняется 8. Если мы попробуем из нашего массива получить значение

array[8];

получим ошибку, ведь мы уже знаем что наш массив проиндексирован от 0 до 7. Вычисление индекса array[array.length - i - 1] при первой итерации даст нам значение равное 7. Всё равно что обратиться к ячейке array[7], которая содержит цифру 8. Далее при завершении первой итерации цикл for прибавит к i единицу.

Answer 2

Работает так же, как

var array = [1,2,3,4,5,6,7,8];
var temp;
for (var i = 0; i < (array.length / 2); i++) {
    temp = array[i];
    array[i] = array[array.length - i - 1];
    array[array.length - i - 1] = temp;
}
document.write(array);

Т.е. зеркально переставляет элементы массива.

Но дольше.

READ ALSO
Оптимальная настройка image-min в Gulp

Оптимальная настройка image-min в Gulp

Подскажите какие должны быть настройки у image-min и его плагинов через Gulp, чтобы уровень сжатия картинок (png, jpg) был приближен к сжатию в Tinypng ?

524
TypeError при попытку вызвать spread в bluebird

TypeError при попытку вызвать spread в bluebird

При попытке запустить такой код

217
Ошибка THREE.ShapeBufferGeometry is not a constructor

Ошибка THREE.ShapeBufferGeometry is not a constructor

Перешел на webpackИмпортирую three

311
Как изменить HTML в массиве?

Как изменить HTML в массиве?

Формирую данные с сервера динамически и храню промежуточные данные задачи в массиве примерно в таком виде

276