我正在与Vue.JS和Laravel 5.2合作开展一个项目。
这是一个训练词汇的程序。所以在我的Vue-Data-Object中有一个包含wordpairs的数组。每个wordpair都存储为一个对象:
"words": [
{
"lang1": "Haus",
"lang2": "house",
"lang1_hint": "",
"lang2_hint": "",
"image_url": "",
"tries": 0,
"fails": 0,
"process": 1
},
{
"lang1": "Feuer",
"lang2": "fire",
"lang1_hint": "",
"lang2_hint": "",
"image_url": "",
"tries": 0,
"fails": 0,
"process": 5
},
...
]
现在我有一个函数,它取数组的长度,生成一个随机数并从上面的数组中返回一个随机数:
getRandomWord: function(){
var i = Math.floor((Math.random() * this.words.length) + 1);
if(this.words[i].process == 5){
return this.getRandomWord();
} else {
return {
index: i,
content: this.words[i]
}
}
}
大多没有问题。但有时,会出现错误说:
Uncaught TypeError: Cannot read property 'process' of undefined
控制台说,错误发生在我的getRandomWord()if(this.words[i].process == 5)
的if条件中。
知道为什么吗?过程的值始终为1,2,3,4或5.
到目前为止感谢!
答案 0 :(得分:1)
Javascript数组的第一个索引是0,因此数组的最后一个索引是array.length - 1
。您生成索引的代码:
Math.floor((Math.random() * this.words.length) + 1);
有时会生成length
的索引 - 该索引不存在。删除+1
,你应该很好。
答案 1 :(得分:1)
我很确定你在这里遇到问题
var i = Math.floor((Math.random() * this.words.length) + 1);
删除+1,你应该很好.Remember数组从索引0开始
答案 2 :(得分:1)
错误表示某些this.words[i]
未定义i
。
你应该写
var i = Math.floor((Math.random() * this.words.length));