我正在处理iTunes API并从专辑中提取歌曲。我尝试按照曲目编号对歌曲进行排序,并根据他们所属的光盘进行排序,但似乎遇到了一些问题。例如,光盘的顺序是相反的顺序。其次,它没有分类跟踪它们应该如何。作为第一关,这就是我尝试排序的方式:
return a.discNumber - b.discNumber && a.trackNumber - b.trackNumber;
需要修复哪些才能使其正常工作?
iTunesSearch();
function iTunesSearch(callback) {
$.getJSON('http://itunes.apple.com/search?term=Speakerboxxx/The Love Below&entity=song&callback=?', function(data) {
var results = data["results"],
tracks = results.filter(function(entry) {
return entry.collectionExplicitness == "explicit"
}),
sortedTracks = tracks.sort(function(a,b) {
return a.discNumber - b.discNumber && a.trackNumber - b.trackNumber;
});
for (var i = 0; i < sortedTracks.length; i++) {
var discNo = "<td>" + sortedTracks[i]["discNumber"] + "</td>",
trackNo = "<td>" + sortedTracks[i]["trackNumber"] + "</td>",
trackName = "<td>" + sortedTracks[i]["trackName"] + "</td>",
$tr = "<tr>" + discNo + trackNo + trackName + "</tr>";
$("table").append($tr);
}
console.log(tracks);
});
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
<thead>
<tr>
<td>Disc Number</td>
<td>Track Number</td>
<td>Track Name</td>
</tr>
</thead>
</table>
&#13;
答案 0 :(得分:4)
您需要使用
return a.discNumber - b.discNumber || a.trackNumber - b.trackNumber;
用于比较功能,因此只有当光盘数相等时才会比较音轨编号(而不是反过来)。然后,要对降序进行排序,只需交换a
和b
:
return a.discNumber - b.discNumber || b.trackNumber - a.trackNumber;
(获得升序光盘,但每张光盘的曲目数下降)
答案 1 :(得分:2)
如果光盘编号已经不同,您的比较仅会检查曲目编号。不是你想要的。
尝试:
return (a.discNumber - b.discNumber) || (a.trackNumber - b.trackNumber);
iTunesSearch();
function iTunesSearch(callback) {
$.getJSON('http://itunes.apple.com/search?term=Speakerboxxx/The Love Below&entity=song&callback=?', function(data) {
var results = data["results"],
tracks = results.filter(function(entry) {
return entry.collectionExplicitness == "explicit"
}),
sortedTracks = tracks.sort(function(a,b) {
return a.discNumber - b.discNumber || a.trackNumber - b.trackNumber;
});
for (var i = 0; i < sortedTracks.length; i++) {
var discNo = "<td>" + sortedTracks[i]["discNumber"] + "</td>",
trackNo = "<td>" + sortedTracks[i]["trackNumber"] + "</td>",
trackName = "<td>" + sortedTracks[i]["trackName"] + "</td>",
$tr = "<tr>" + discNo + trackNo + trackName + "</tr>";
$("table").append($tr);
}
console.log(tracks);
});
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<table>
<thead>
<tr>
<td>Disc Number</td>
<td>Track Number</td>
<td>Track Name</td>
</tr>
</thead>
</table>
&#13;