【问题标题】:Array.includes() returning undefinedArray.includes() 返回未定义
【发布时间】:2018-11-19 18:13:00
【问题描述】:

我正在尝试获取用户输入的单词,将其与数组中的所有单词进行检查,然后删除数组中包含任何相同字母的单词,其中包含以下内容:

var words = [
// words go here
]

for (let a = 0; a <= inputWord.length; a++) {
    for (let b = 0; b <= words.length; b++) {
        if (!words[b].includes(inputWord[a])) {
            words.splice(b, 1); 
        }
    }
}

浏览器控制台显示“TypeError:无法读取未定义的属性‘包含’。”测试时我可以打印出input[A] 很好,我可以打印出words[ 我选择的随机数] 很好,但是当我尝试打印words[b] 时,它会出现未定义。

问题
我无法弄清楚为什么words[b] 未定义。

【问题讨论】:

  • splace 拼写在编程中很重要。检查您的控制台是否有错误。
  • 一个空数组将返回未定义的代码,如果你试图循环遍历数组,你应该使用b &lt; words.length
  • 对不起!在问题中修复了它,但这只是我匆忙写这篇文章。据我所知,我的实际代码中的所有内容似乎都拼写正确。
  • 您不应该尝试从 0 迭代到 &lt;= .length - 在达到数组长度之前停止 。更好的是,改用filterfor 循环不太好使用
  • @ItaiYasur 只做 b

标签: javascript arrays include undefined


【解决方案1】:

数组索引从 0 开始。从 0 - arr.length-1 运行循环。 words[words.length] 处的元素未定义。

let words = [
// words go here
]

for (let a = 0; a < inputWord.length; a++) {
    for (let b = 0; b < words.length; b++) {
        if (!words[b].includes(inputWord[a])) {
            words.splice(b, 1); 
        }
    }
}

【讨论】:

  • 感谢您的帮助!由于循环从 0 开始,数组索引也从 0 开始,所以在 array[array.length] 处不应该有一个项目吗?和array = [0, 1, 2]一样,这里的array[array.length]不会输出2吗?
  • @ItaiYasur array[array.length] 将输出未定义的朋友。并且 array[array.length-1] 将输出 2。这里 0 -> 在索引 0 处,1-> 在索引 1 处,2 -> 在索引 2 处。数组的长度将为 3,因为其中有 3 个元素大批。因此,如果您执行 array[array.length],这将等效于 array[3],并且 array[3] 中不存在任何元素,因此它是未定义的。
猜你喜欢
  • 2019-11-17
  • 1970-01-01
  • 2016-11-18
  • 2019-12-24
  • 2016-05-15
  • 2017-03-11
  • 2019-07-09
  • 2020-10-02
  • 2020-05-22
相关资源
最近更新 更多