javasciptでオブジェクトの配列を並べ替えようとしています。ソート順自体は、オブジェクトのプロパティと単一の外部変数の値という2つの要因に依存します。array.sort(sortFunction)を使用してカスタム関数を挿入できることは知っていますが、外部変数(ソート中に固定される)に応じて異なる関数を使用する必要があります。
実際の問題ははるかに複雑ですが、問題を示す最小限のテストケースに並べ替えを減らし、「降順/昇順」パラメーターを挿入しようとしました。結果をreverse()できることはわかっていますが、ここでは問題にはなりません。
コードは次のとおりです。
var ar = [ 10, 3, 5, 17 ];
var ns = new nsort();
ar.sort(ns.sort);
console.log(ar);
function nsort()
{
this.desc = true;
this.sort = function(a,b) {
console.log(this.desc);
if (this.desc)
return b-a;
else
return a-b;
}
}
これが出力です(Node.jsを使用)
undefined
undefined
undefined
undefined
[ 3, 5, 10, 17 ]
配列の並べ替えコードは、並べ替え中に親オブジェクトの外部に関数を抽出するようです。
なぜこれが起こっているのか、そしてそれを行うための適切な方法は何でしょうか?
更新:私はそれを機能させる方法を見つけました:
var ar = [ 10, 3, 5, 17 ];
var ns = new nsort(true);
ar.sort(ns.sort);
console.log(ar);
function nsort(desc)
{
this.sort = function(a,b) {
if (desc)
return b-a;
else
return a-b;
}
}
これは良い考えですか?それとももっと良いものがありますか?