【发布时间】:2016-10-07 05:14:29
【问题描述】:
我编写了一个非常简单的应用程序,它可以从 Spotify 播放列表中提取所有曲目。首先,它使用 AJAX 请求获取轨道 JSON 对象,并将它们放入名为 tracks[] 的数组中。
接下来,我遍历这个数组,在每次迭代中,我都会提取出歌曲名称和每首曲目的艺术家的字符串。我把它们放在一个集中的字符串中。然后将该字符串存储在一个名为complete 的新数组中。这是为每个轨道完成的。
本质上,complete 是一个类似于
[
"Sympathy for The Devil, The Rolling Stones",
"Come Together, The Beatles",
...
]
此时我有一个奇怪的问题。根据 chrome 的调试器,数组complete 中包含所有正确的值。但是,当我尝试 console.log complete 的任何元素时,我最终会得到值“未定义”。更奇怪的是,如果我使用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 ;)
标签: javascript arrays json undefined spotify