5

アプローチ

選択したパラメーターを使用して配列のオブジェクトを並べ替えるカスタム メソッドを作成しようとしています。

たとえば、次の配列があります...

var albumList = [
   { value: 'A 2011', count: '18' },
   { value: 'Z 2012', count: '22' },
   { value: 'C 2012', count: '7' },
   { value: 'H 2013', count: '21' }
   // etc...
];

この配列を「値」でアルファベット順に並べ替えることができましたが、機能が制限されていました。

Array.prototype.alphaSort = function () {
    function compare(a, b) {
        if (a.value < b.value) // sorting by 'count'
            return -1;
        if (a.value > b.value) // sorting by 'count'
            return 1;
        return 0;
    }
    this.sort(compare);
}

次に、すべてを呼び出すalbumList.alphaSort();ことで完全に機能します。ただし、制限付きと呼んだ理由は、配列をソートするパラメーターを決定できないためです。上記の 2 番目のコード スニペットで設定されているため、デフォルトでは「値」です。

基本的に、私がやろうとしているのは、関数が'count'albumList.alphaSort('count')に基づいてソートプロセスを自動的に実行できるようにすること、または追加のキーと値の将来の可能性があるものを実行できるようにすることです。コード全体を変更...

// .alphaSort('count') should be interpreted as follows

if (a.count < b.count) // sorting by 'value'
     return -1;
if (a.count > b.count) // sorting by 'value'
     return 1;

つまり、いつでも実装できる引数/パラメーターを渡す必要があります。したがって、後の変更から派生したエラーを簡単に処理できます。その場合、比較ロジックは...

a.MY_ARGUMENT < b.MY_ARGUMENT

私が探しているもののアイデアが得られたことを願っています!


問題

試みとして、明確にするために(意味はありませんが)、次のようにしました...

Array.prototype.alphaSort = function (sortParameter) {
     function compare(a, b) {
         if (a.sortParameter < b.sortParameter) 
             return -1;
         if (a.sortParameter > b.sortParameter)
             return 1;
         return 0;
    }
    this.sort(compare);
}

albumList.alphaSort('count');

これは、明らかに、「sortParameter」をcompare関数に渡さcompare(a,b)ず、追加のパラメーターも取りません。


重複の可能性

javascript の array.sort() メソッドを拡張して別のパラメータを受け入れる方法はありますか?

4

1 に答える 1