【发布时间】:2017-11-22 23:13:34
【问题描述】:
我正在尝试添加匹配数组的所有数字并删除重复的名称。它适用于第一个实例,但 while 循环不会越过 Apples。
function updateInventory(arr1, arr2) {
function alphabetizer(a, b) {
if (a[1] < b[1]) return -1;
if (a[1] > b[1]) return 1;
return 0;
}
var newInv = arr1.concat(arr2).sort(alphabetizer);
for(var i = 0; i < newInv.length; i++) {
while(newInv[i][1] === newInv[i++][1]) {
newInv[i] += newInv[i++][0];
newInv.push([newInv[i][0], newInv[i][1]]);
newInv.splice(i,2);
}
}
return newInv;
}
// Example inventory lists
var curInv = [
[21, "Bowling Ball"],
[2, "Dirty Sock"],
[1, "Hair Pin"],
[5, "Microphone"],
[10, "Apples"]
];
var newInv = [
[9, "Apples"],
[2, "Hair Pin"],
[3, "Half-Eaten Apple"],
[67, "Bowling Ball"],
[7, "Toothpaste"]
];
updateInventory(curInv, newInv);
它一直给我错误TypeError: newInv[(+ i)] is undefined 但我不知道为什么,因为我已经定义了,如果我只是尝试运行newInv[i],我会得到第一个结果。
【问题讨论】:
-
您通过执行
i++在while 循环中将i增加两次,您可能不想这样做。你可能想要i + 1 -
当它告诉我
i+1没有定义。 -
未定义的不是
i- 它是newInv[i + 1]- 因为在循环结束时 i == netInv.length - 1 和 i + 1 (newInv[newInv.length])引用数组中不存在的索引...因此,未定义
标签: javascript for-loop multidimensional-array while-loop