我无法弄清楚为什么这段代码会给我
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);
我尝试了什么:
当我使用i < arr.length
在fromListToObject()函数中运行for循环时,它可以工作。我试过寻找答案,但我可能会以错误的方式提问。
循环不应该与“=”运算符一起使用吗?
答案 0 :(得分:5)
如果您有一个包含10个元素的数组,并且您开始使用>>> ================================ RESTART ================================
>>>
url = facebook.com, code = 200, status = OK
url = twitter.com, code = 200, status = OK
url = google.com, code = 200, status = OK
url = youtube.com, code = 200, status = OK
url = icantfindthiswebsite.com, code = None, status = 'Code not defined'
>>>
进行计数 - 则最后一个元素将放置在1
位置。
但是 - 如果你使用10th
开始计数(这是数组的工作方式),最后一个位置将是0
(在本例中为9)。
在您的示例中,length - 1
循环以for
开头,并且应计入数组中的最后一个元素,该元素位于0
位置。
那个地方也是length - 1
(因为当我们到达<length
时 - 这是“超出数组” - 你试图访问一个不存在的地方的元素):
=length
请注意,完全相同,您可以这样做:
for (var i = 0; i < arr.length; i++) {
...
}
但这不常见。
您拥有的另一个选择是使用数组的forEach
方法:
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]
...
}