我在這個項目上使用CodePen,這是我發現我的代碼中有一個無限循環。順便說一句 - 它將無限循環的行數估計爲0行,這就是爲什麼我懷疑它與$(document).ready()
代碼段有關。
我是一個jQuery/API初學者,所以很抱歉,如果這是顯而易見的。
下面是代碼:
$(document).ready(function() {
var key = '*****************';
var i = 0;
var hotArray = [];
function isInArray(value, array) {
return array.indexOf(value) > -1;
}
function getMusic() {
$.getJSON('http://developer.echonest.com/api/v4/song/search?api_key=' + key + '&artist=led+zeppelin&sort=song_hotttnesss-desc&results=50&bucket=song_hotttnesss', function(data) {
while ($('.songs li').length < 10) {
if (!(isInArray(data.response['songs'][i]['hotttnesss'], hotArray))) {
$('.songs').append('<li>' + data.response['songs'][i]['title'] + '</li>');
hotArray.push(data.response['songs'][i]['hotttnesss'])
}
}
i++;
});
};
$('.click').click(getMusic);
});
代碼的簡要說明:
我試圖獲得前10名的歌曲Led Zeppelin的,當我點擊頁面的某個位(稍後將被擴展到用戶輸入的藝術家)。但是,Echo Nest API的工作方式會返回許多重複項。例如,「天國的階梯」和「天國的階梯」被認爲是兩首獨立的歌曲。
爲了解決這個問題,我使用每首歌曲的「hotttnesss」值,每首歌曲都是獨一無二的。同一個歌手的兩首歌曲唯一可以擁有相同的樂句的方式是,如果它們實際上是同一首歌曲,則這些重複的情況就是這樣。
因此,當報告的歌曲數量低於10時,我正在瀏覽每個返回的歌曲,並且在歌曲的霍特值不在已報告的歌曲的霍特值數組中時報告歌曲。報告歌曲後,歌曲的霍特值將被添加到數組中。
Thanks for the響應。我明白你的意思,而且它看起來應該有效,但實施該解決方案只會返回一首歌曲,我希望它返回十首。 – khanu263
@ khanu263:然後在某個地方還有一個邏輯錯誤,但是上面的地址說明了問題提到的無限循環。我建議通過[*如何調試小程序*](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)進行工作。 –