按数字对数组中的对象按降序排序

时间:2015-04-15 14:05:37

标签: javascript jquery html json sorting

我正在处理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;
&#13;
&#13;

2 个答案:

答案 0 :(得分:4)

您需要使用

return a.discNumber - b.discNumber || a.trackNumber - b.trackNumber;

用于比较功能,因此只有当光盘数相等时才会比较音轨编号(而不是反过来)。然后,要对降序进行排序,只需交换ab

return a.discNumber - b.discNumber || b.trackNumber - a.trackNumber;

(获得升序光盘,但每张光盘的曲目数下降)

答案 1 :(得分:2)

如果光盘编号已经不同,您的比较仅会检查曲目编号。不是你想要的。

尝试:

return (a.discNumber - b.discNumber) || (a.trackNumber - b.trackNumber);

&#13;
&#13;
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;
&#13;
&#13;