アプローチ
選択したパラメーターを使用して配列のオブジェクトを並べ替えるカスタム メソッドを作成しようとしています。
たとえば、次の配列があります...
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)
ず、追加のパラメーターも取りません。
重複の可能性