【问题标题】: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")
}

未定义的输出,怎么了?

【问题讨论】:

  • 你期待什么输出?
  • 你做的比你需要的更复杂。有findIndex如果你想找到索引,我看到你已经用sort标记了它,所以你可能对sort感兴趣

标签: 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++
        }

        【讨论】:

          猜你喜欢
          • 2021-12-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-28
          • 2012-01-02
          • 2013-09-28
          • 1970-01-01
          相关资源
          最近更新 更多