arr.map(function(str, i){
return {
index: i,
length: str.length,
value: str
}
}).sort(function(a, b){
return b.length - a.length || a.index - b.index;
}).map(function(obj){
return obj.value;
})
これは、多くのオーバーヘッドのように見えるかもしれませんが、できるだけ早くあなたが何らかの形であなたがソートされている値を計算する必要があるとして、それは一度それを計算し、それを保存するために高速です潜在的に*(n-1)回の操作でそれを計算するよりも、いくつかのオブジェクトです。
このソート方法は、しばしばパフォーマンスの高い方法です。
それとも、2つのマッピング・タスクをgenerallize:
var valueIndex = function(value,index){ return {value:value,index:index} };
var getValue = function(obj){ return obj.value };
arr.map(valueIndex)
.sort(function(a, b){
return b.value.length - a.value.length || a.index - b.index
})
.map(getValue);
ES6
var valueIndex = (value,index) => { return {value,index} };
var getValue = ({value}) => value;
arr.map(valueIndex)
.sort((a, b) => b.value.length - a.value.length || a.index - b.index)
.map(getValue);
安定性は、ソートアルゴリズムのプロパティです。 Javascript 'sort'は**安定していないので、最初に新しい配列' arr2'を '(el、i)'で作成することで対処しなければなりません。ここで 'el'は' arr'の位置'i'を実行し、これらのペアを辞書順にソートし、最後に2番目の' i'要素を削除します。あるいは、独自の安定したソートアルゴリズム(例えば、マージソート)を書くこともできます。 – Bakuriu
http://stackoverflow.com/questions/1427608/fast-stable-sorting-algorithm-implementation-in-javascript – elclanrs
安定したソートアルゴリズムを手動で実装するだけです。 – Oriol