Массивы Javascript

241
26 ноября 2016, 17:56

var a = [5, 12]; 
var b = []; 
a[99] = 7; 
for (var i = 0; i < a.length; i++) { 
  if (a[i] != undefined) 
    b.push(Math.pow(a[i], 2)); 
  console.log(b[i]); 
} 
for (var i in a) { 
  b.push(Math.pow(a[i], 2)); 
  console.log(b[i]); 
}

Вопрос: почему в консоли не выводится квадрат 99 элемента?

Answer 1

Потому что вы записываете не то, что считываете.

b.push записывает элемент в "хвост" массива, по индексу b.length.

Вы дописываете в b элементы только когда натыкаетесь на не-undefined элемент в a. Поэтому когда цикл натыкается на undefined в a, величина b.length отстаёт на 1 от i. А у вас там в массиве a довольно внушительная дыра, сквозь которую видно одни undefined.

И получается, что число 49 в вашем массиве квадратов находится под индексом 2, а не 99, где вы ожидаете его увидеть.

Что делать?

Старайтесь соблюдать в коде однородность. Если выводите b[i] то записывать есть смысл, как b[i] = значение. Или, что может быть даже лучше, сохранять вставляемое значение в локальную переменную и выводить где-то рядом со вставкой.

Answer 2

Т.к. метод push() добавляет элементы и присваивает последовательные индексы, то индексы элементов в b будут 0, 1, 2, тогда как в а индексы элементов 0, 1, 99, поэтому индексация в массивах а и b будет отличаться

var a = [5, 12]; 
var b = []; 
a[99] = 7; 
for (var i = 0; i < a.length; i++) { 
  if (a[i] != undefined) { 
    b.push(Math.pow(a[i], 2)); 
    console.log(b[b.length - 1]); 
  } 
} 
for (var i in a) { 
  b.push(Math.pow(a[i], 2)); 
  console.log(b[b.length - 1]); 
}

READ ALSO
textarea вставляет перевод строки [закрыто]

textarea вставляет перевод строки [закрыто]

Есть textarea в которую я через $("#text")val(res); записываю текст

317
Как использовать свою музыку?

Как использовать свою музыку?

Есть исходники замечательного проекта https://githubcom/Nasso/urmusic Там визуализируется музыка с soundcloud или та которую загрузил клиент

244
Анимация по таймеру javascript

Анимация по таймеру javascript

Вопрос заключается в том что бы написать на чистом javascript код который позволит каждые определенные n секунд добавлять и удалять классВот код...

298