Мне трудно понять, почему этот блок кода дает мне
TypeError: Невозможно прочитать свойство "0" неопределенного
function fromListToObject(array) {
// make new empty object to store key:value in
var obj = {};
// loop over the given array
for (var i = 0; i <= arr.length; i++){
//every iteration keys gets stored with new key
var keys = arr[i][0];
// same here
var values = arr[i][1];
//pushing new key:value into obj
obj[keys] = values;
}
return obj;
}
var arr= [['1', 'One'], ['2', 'Two'], ['3', 'Three'], ['4', 'Four'], ['5', '5']];
var result = fromListToObject(arr);
console.log(result);
То, что я пробовал: Когда я запускаю цикл for внутри функции fromListToObject() только с i < arr.length
это работает. Я пробовал искать ответы, но я мог бы спросить не так. Не должен ли цикл работать с оператором "="?
Если у вас есть массив из 10 элементов, и вы начинаете считать с 1
- последний элемент будет помещен на 10th
е место.
Однако, если вы начинаете свой счет с 0
(как работает массив), последняя позиция будет length - 1
(в этом примере - 9).
В вашем примере - цикл for
начинается с 0
и должен отсчитываться до последнего элемента в вашем массиве, который помещается в позицию length - 1
.
Это место также <length
(потому что когда мы добираемся до =length
- это "вне массива" - вы пытаетесь получить доступ к элементу в месте, которое не существует):
for (var i = 0; i < arr.length; i++) {
...
}
Обратите внимание, что точно так же вы можете сделать:
for (var i = 1; i <= arr.length; i++) {
// Note that here you would want to access the elements
// in the array using arr[i-1]
...
}
Но это реже.
Другой вариант, который у вас есть, - использовать метод forEach
массива:
arr.forEach(function(element) {
...
});
for (var i = 1; i <= arr.length; i++) {
) не верен ..... Я думаю, что вы думаете о (var i = 0; i <= arr.length-1; i++)
i
внутри этого цикла. Если вы используете arr[i-1]
он работает отлично ...
<
- правильное сравнение.