How can I get rid of error - TypeError: Cannot read property '8' of undefined
How can I get rid of error - TypeError: Cannot read property '8' of undefined
while 语句不断抛出错误(TypeError:无法读取未定义的 属性 '8'),但是 console.log 仍然输出它想要的结果。
var hold = [];
for (let i = 0; i < (clothes.length - 1); i++) {
let count = 0;
if (hold.length === 0) {
hold.push(clothes[i]);
} else {
console.log(clothes[i][8], hold[count][8]);
while (clothes[i][8] < hold[count][8]) {
count++;
}
hold.slice(count, 0, clothes[i]);
}
}
这部分代码递增 count
超出了 hold[]
的长度
while (clothes[i][8] < hold[count][8]){
count ++;
};
手动单步执行:
- 衣服[0]被“if hold is empty clause”添加为 hold[0]
- clothes[1] 与 hold[0] 进行比较并且是
<
所以 count++
- clothes[1] 与 hold[1] 进行比较,但没有 hold[1],因此出现错误
在 while
中添加一个子句
while (count < hold.length && clothes[i][8] < hold[count][8]){
count ++;
};
注意 必须首先检查长度,否则你仍然会得到相同的错误(还有其他方法,例如 while
之外的 break
)。 &&
的第二部分是 only valuated 如果第一部分是 true
。
您有其他问题停止完整的解决方案:
for (let i = 0; i < (clothes.length - 1); i++){
将循环到长度为 1,所以如果你有 3 个元素,你只会得到两个。您需要使用 或者
i<clothes.length
i<=(clothese.length-1)
和
hold.slice(count, 0, clothes[i]);
不是 .slice
和切片 returns 新数组的语法,不会就地更改数组。这应该是
hold.splice(count, 0, clothes[i]);
提供更新的代码段:
var clothes = [[2],[1],[3]];
var hold = []
for (let i = 0; i < clothes.length; i++) {
var count = 0;
if (hold.length === 0) {
hold.push(clothes[i]);
} else {
while (count<hold.length && clothes[i][0] < hold[count][0]) {
count++;
};
if (count == hold.length) {
hold.push(clothes[i])
}
else {
hold.splice(count, 0, clothes[i]);
}
}
}
console.log(hold.join(","));
while 语句不断抛出错误(TypeError:无法读取未定义的 属性 '8'),但是 console.log 仍然输出它想要的结果。
var hold = [];
for (let i = 0; i < (clothes.length - 1); i++) {
let count = 0;
if (hold.length === 0) {
hold.push(clothes[i]);
} else {
console.log(clothes[i][8], hold[count][8]);
while (clothes[i][8] < hold[count][8]) {
count++;
}
hold.slice(count, 0, clothes[i]);
}
}
这部分代码递增 count
超出了 hold[]
while (clothes[i][8] < hold[count][8]){
count ++;
};
手动单步执行:
- 衣服[0]被“if hold is empty clause”添加为 hold[0]
- clothes[1] 与 hold[0] 进行比较并且是
<
所以 count++ - clothes[1] 与 hold[1] 进行比较,但没有 hold[1],因此出现错误
在 while
while (count < hold.length && clothes[i][8] < hold[count][8]){
count ++;
};
注意 必须首先检查长度,否则你仍然会得到相同的错误(还有其他方法,例如 while
之外的 break
)。 &&
的第二部分是 only valuated 如果第一部分是 true
。
您有其他问题停止完整的解决方案:
for (let i = 0; i < (clothes.length - 1); i++){
将循环到长度为 1,所以如果你有 3 个元素,你只会得到两个。您需要使用 或者
i<clothes.length
i<=(clothese.length-1)
和
hold.slice(count, 0, clothes[i]);
不是 .slice
和切片 returns 新数组的语法,不会就地更改数组。这应该是
hold.splice(count, 0, clothes[i]);
提供更新的代码段:
var clothes = [[2],[1],[3]];
var hold = []
for (let i = 0; i < clothes.length; i++) {
var count = 0;
if (hold.length === 0) {
hold.push(clothes[i]);
} else {
while (count<hold.length && clothes[i][0] < hold[count][0]) {
count++;
};
if (count == hold.length) {
hold.push(clothes[i])
}
else {
hold.splice(count, 0, clothes[i]);
}
}
}
console.log(hold.join(","));