2017-05-29 67 views
0

我按類型排序此類型的數組:是否有可能基於JavaScript中的另一個對象對排序後的數組進行排序?

const bands = [ 
    { genre: 'Rap', band: 'Migos', albums: 2}, 
    { genre: 'Pop', band: 'Coldplay', albums: 4, awards: 10}, 
    { genre: 'Pop', band: 'xxx', albums: 4, awards: 11}, 
    { genre: 'Pop', band: 'yyyy', albums: 4, awards: 12}, 
    { genre: 'Rock', band: 'Breaking zzzz', albums: 1} 
    { genre: 'Rock', band: 'Breaking Benjamins', albums: 1} 
]; 

有了這個:

function compare(a, b) { 
    // Use toUpperCase() to ignore character casing 
    const genreA = a.genre.toUpperCase(); 
    const genreB = b.genre.toUpperCase(); 

    let comparison = 0; 
    if (genreA > genreB) { 
    comparison = 1; 
    } else if (genreA < genreB) { 
    comparison = -1; 
    } 
    return comparison; 
} 

由於描述here 但按流派分類後,我也想通過專輯的數量排序。可能嗎? TIA

+1

的[分組排序一個JS數組]可能的複製(https://stackoverflow.com/questions/16164078/grouped-sorting-on-a- js-array) – Zenoo

+1

標題與這個問題有什麼關係? 「基於另一個對象進行排序」與「按多個屬性排序」 – Andreas

+0

[Javascript,如何對多列上的數組進行排序?](https://stackoverflow.com/questions/2784230/javascript-how- do-you-sort-an-array-on-multiple-columns) – Andreas

回答

1
function compare(a, b) { 
// Use toUpperCase() to ignore character casing 
const genreA = a.genre.toUpperCase(); 
const genreB = b.genre.toUpperCase(); 

return genreA.localeCompare(genreB) || a.albums- 
b.albums; 
} 

我將代碼縮短到genreA.localeCompare(genreB)。如果它是0,那麼流派是平等的,因此我們會根據專輯數量進行比較。

此,如果取0 ...而不是由或運營商提供...

+0

謝謝。有效! –

0

當然,在完成後做什麼,你需要與第一陣列做。假設你不想修改你的第一個數組,你可以使用slice創建一個副本。然後你可以按專輯號碼排序。讓我知道,如果這有助於

const bands = [{ 
 
    genre: 'Rap', 
 
    band: 'Migos', 
 
    albums: 2 
 
    }, 
 
    { 
 
    genre: 'Pop', 
 
    band: 'Coldplay', 
 
    albums: 4, 
 
    awards: 10 
 
    }, 
 
    { 
 
    genre: 'Pop', 
 
    band: 'xxx', 
 
    albums: 4, 
 
    awards: 11 
 
    }, 
 
    { 
 
    genre: 'Pop', 
 
    band: 'yyyy', 
 
    albums: 4, 
 
    awards: 12 
 
    }, 
 
    { 
 
    genre: 'Rock', 
 
    band: 'Breaking zzzz', 
 
    albums: 1 
 
    }, 
 
    { 
 
    genre: 'Rock', 
 
    band: 'Breaking Benjamins', 
 
    albums: 1 
 
    } 
 
]; 
 

 

 
var sortedAlbumNumber = bands.slice(); 
 

 
sortedAlbumNumber.sort((a, b) => a['albums'] - b['albums']); 
 

 
console.log(sortedAlbumNumber);

相關問題