我已经编写了一个非常简单的应用程序,可以将Spotify播放列表中的所有音轨关闭。首先,它使用AJAX请求获取跟踪JSON对象,并将它们放入一个名为tracks[]
的数组中。为什么我定义的字符串作为未定义打印到控制台?
接下来,我遍历这个数组,并且在每次迭代中,我都会为每首曲目的歌曲名称和艺术家提取字符串。我把它们放在一个集中的字符串中。然后将该字符串存储在名为complete
的新数组中。这是为每个轨道完成的。
从本质上讲,complete
是看起来像
[
"Sympathy for The Devil, The Rolling Stones",
"Come Together, The Beatles",
...
]
在这一点上我有一个奇怪的问题的数组。根据chrome的调试器,数组complete
具有所有正确的值。但是,当我试图console.log
complete
的任何元素时,最终的值为'undefined'。陌生人呢,如果我用console.log
这个表达式来得到两个字符串并将它们缝合起来,它就会打印出正确的值。
为什么会出现这种情况,我该如何解决它,因此它可以console.log
正确的价值观
这里是通过存储JSON对象进行迭代,将它们存储在新数组的代码,并打印:
function print() {
for(var x = 0; x < 4; x++) {
for(var n = 0; n < 100; n++) {
try {
//this logs correct
console.log(tracks[x].items[n].track.name + " " + tracks[x].items[n].track.artists[0].name);
//these have correct value
var deb = (tracks[x].items[n].track.name + " " + tracks[x].items[n].track.artists[0].name);
complete[z] = deb;
z++;
console.log(deb); //throws no error, prints fine
console.log(complete[z]); //prints undefined
} catch(err) {
//no exception ever thrown
}
}
}
}
我不会做太多的JS,对不起,如果我失去了明显的东西。
你在哪里声明'complete'是一个数组,而'z'声明为int? –
@Œlrim在脚本的开头,就在这个函数被调用之前:'var complete = new Array(400);'如果这是不正确的,我道歉,如果你说不出来,我不会做太多的JS; ) –