【发布时间】:2017-09-09 00:09:15
【问题描述】:
我正在处理库存功能,但是,我不断收到错误:未捕获的类型错误:无法读取未定义的属性“1”。我不认为我会超过数组的长度,那么为什么我会得到“属性'1'未定义”。显然我正在尝试读取的内容不存在。我只是看不到它。感谢任何帮助。我使用 console.log 尝试记录错误。但所有内容都返回输出。谢谢
function updateInventory(arr1, arr2) {
// All inventory must be accounted for or you're fired!
for(var i = 0; i < arr1.length; i++) {
//if item found, update
var index = findItem(arr1[i][1], arr2);
if(index != undefined) {
arr1[i][0] += arr2[i][0];
}
else {
arr1.push(arr2[index]);
}
}
//sort arr1
arr1.sort(function(first, second) {
return (first[1] > second[1]) ? 1 : -1;
});
return arr1;
}
//helper method to search arr2
function findItem(item, arr2) {
for(var i = 0; i < arr2.length; i++) {
if(item === arr2[i][1])
return i;
}
return undefined;
}
// Example inventory lists
var curInv = [
[21, "Bowling Ball"],
[2, "Dirty Sock"],
[1, "Hair Pin"],
[5, "Microphone"]
];
var newInv = [
[2, "Hair Pin"],
[3, "Half-Eaten Apple"],
[67, "Bowling Ball"],
[7, "Toothpaste"]
];
updateInventory(curInv, newInv);
【问题讨论】:
-
而且该错误可能带有行号
-
你在很多地方都在使用
[1];错误指的是哪个? -
这里只是一个注释 - 我建议将事物推送到您正在迭代的数组上,因为它会使事情变得更加复杂!尝试在循环期间构建一个要添加的东西数组,然后在最后全部推送。
标签: javascript arrays function