【问题标题】:JavaScript While Loop Array Undefined outputJavaScript While 循环数组未定义的输出
【发布时间】:2018-03-30 10:20:55
【问题描述】:
var v = 0
var x = ["a", "b", "c"];
var beasts = [{
"kind": [{
"q": "a"
}, {
"q": "b"
}, {
"q": "c"
}]
}];
while (x.indexOf(beasts[0].kind[v].q)) {
v++
console.log("loop")
}
未定义的输出,怎么了?
【问题讨论】:
标签:
javascript
arrays
loops
sorting
【解决方案1】:
v == 0 时,测试为x.indexOf("a")。这会返回0,这是错误的,因此循环立即结束。
使用indexOf() 的正确方法是x.indexOf(...) != -1。
您还需要检查v 是否在beasts[0].kind 的大小范围内,否则到达数组末尾时会出错。
var v = 0
var x = ["a", "b", "c"];
var beasts = [{
"kind": [{
"q": "a"
}, {
"q": "b"
}, {
"q": "c"
}]
}];
while (v < beasts[0].kind.length && x.indexOf(beasts[0].kind[v].q) != -1) {
v++
console.log("loop")
}
【解决方案2】:
您可以在 sn-p 中看到,while 中的条件评估为 0,这是一个虚假值。 While 循环永远不会运行!
var v = 0
var x = ["a","b","c"];
var beasts = [{"kind": [{"q": "a"}, {"q": "b"}, {"q": "c"}]}];
while (x.indexOf(beasts[0].kind[v].q)) {
v++
console.log("loop")
}
console.log(beasts[0].kind[v].q);
console.log(x.indexOf(beasts[0].kind[v].q));
【解决方案3】:
您没有检查beasts[0].kind[v] 的undefined 案例,因为您正在增加while 循环内v 的值v 的最后一个值将超过内部数组的长度将导致undefined。你也不需要indexOf 计算。
var v = 0
var x = ["a","b","c"];
var beasts = [{"kind": [{"q": "a"}, {"q": "b"}, {"q": "c"}]}];
while (beasts[0].kind[v]) {
v++;
console.log("loop");
}
但是如果你想确保属性q你可以使用这个
var v = 0
var x = ["a","b","c"];
var beasts = [{"kind": [{"q": "a"}, {"q": "b"}, {"q": "c"}]}];
while (beasts[0].kind[v] && x.indexOf(beasts[0].kind[v].q) != -1) {
v++;
console.log("loop");
}
【解决方案4】:
你可以测试对象是否存在。
var v = 0
var x = ["a", "b", "c"];
var beasts = [{
"kind": [{
"q": "a"
}, {
"q": "b"
}, {
"q": "c"
}]
}];
while (beasts[0].kind[v]) {
console.log(x.indexOf(beasts[0].kind[v].q))
v++
}