尝试将变量用作数组索引。变量addThirteen
只需i
并为其添加13。我需要将该结果用作数组索引。请看我的代码:
for (var i = 0; i < alphabetArr.length; i ++) {
var addThirteen = (parseInt(i) + parseInt(13));
var newCipher = new cipher(alphabetArr[i].letter, alphabetArr[addThirteen].letter);
}
这导致:
TypeError:undefined不是对象(评估 'alphabetArr [addThirteen] .letter')
感谢任何帮助。
答案 0 :(得分:1)
尝试打印迭代,每次都打开for循环:
console.log(i);
console.log(addThirteen);
这里似乎发生的事情是,当我是alphabetArr.length-13时,它试图获得一个在数组之外的字符。因为它无法做到这一点,它会抛出错误,说这封信是未定义的,因为它是。这个问题的解决方案是:
for (var i = 0; i < alphabetArr.length - 13; i ++) {
答案 1 :(得分:0)
您获得的结果实际上取决于alphabetArr
变量。
alphabetArr
只是一个字符串数组的示例。
const alphabetArr = "abcdefghejklmnopqrstuvwxyz".split('');
/* If you want to see what alphabetArr really is, uncomment
* the following line an run. (copy snippet to answer to do it)
* The result will be ["a", "b", "c", ..., "z"].
*/
// console.log(alphabetArr);
/* we will always get undefined here because alphabet[i]
* is not an object having the property letter.
* Instead, it is just a string.
*/
for (var i = 0; i < alphabetArr.length; i++) {
console.log(alphabetArr[i].letter);
}
此示例仅提供undefined
,因为alphabetArr[i]
不是属性letter
的对象,而是字符串。
alphabetArr
是一个对象数组,每个对象都具有属性letter
const alphabetArr = "abcdefghijklmnopqrstuvwxyz".split('')
.map(letter => ({letter: letter}));
// console.log(alphabetArr);
// result: [ { letter: "a" } , ... , { letter: "z" } ]
/* Here everything works fine until we reach
* the index 13, where the output is m z
*/
for (var i = 0; i < alphabetArr.length; i++) {
// Note that I am not parsing. It's because it is not necessary.
var addThirteen = i + 13;
console.log(alphabetArr[i].letter, alphabetArr[addThirteen].letter);
}
如你所见,现在我们得到了一些东西,但在某个时刻,我们仍然会得到抛出的错误。这是因为for
循环遍历整个数组。
因此,当i
为14时,addThirteen
将为27.但是数组的长度为26,因此alphabetArr[27]
为undefined
。
const alphabetArr = "abcdefghijklmnopqrstuvwxyz".split('')
.map(letter => ({letter: letter}));
for (var i = 0; i < alphabetArr.length - 13; i++) {
// let's skip the addThirteen variable declaration.
console.log(alphabetArr[i].letter, alphabetArr[i + 13].letter);
}
是的!解决方案是循环遍历数组减去十三,以避免超出范围索引。
最终代码:
const alphabetArr = "abcdefghijklmnopqrstuvwxyz".split('')
.map(letter => ({letter: letter}));
for (var i = 0; i < alphabetArr.length - 13; i++) {
var newCipher = new cipher(alphabetArr[i].letter, alphabetArr[i + 13].letter);
}