2017-02-13 8 views
1

私はいくつかのプロパティで注文したいオブジェクトの配列を持っています。私はいくつかの基準に従って、アレイを注文したいと私は複数の条件を満たすカスタムarray.sort関数。ブール

if (a.priority != b-priority){ 
    return a-priority - b-priority; 
else if a.shooterid != b.shooterid){ 
    return a.shooterid - b. shooterid 
} 
else return a.targetid - b.targetid 
を使用することにより、優先度、シューターやターゲットによってソートを行うことができ、アレイ

var ele = { 
    id: INT, various, 
    priority: INT 1 - 10, 
    shooterid: INT various, 
    targetid: INT various, 
    flight: BOOL 
} 

の単一の要素を紹介しよう

イム

しかし、私もフライトで並べ替えたいと思っており、flight = trueのすべての要素を最後に並べ替えたいのですが上記の並べ替えにしてください。

がどのように私はBOOLの小道具のために含まれるようにソートを拡張することができます...セルフ(あれば以前に他の追加)/場合、私はif (a.flight){return -1/0/1}に上記の非常にトップを試してみましたが、それは仕事をdidntの?

+2

いくつかの小さなサンプルデータを追加してください。 –

+0

「飛行」の比較を最初に行うだけです。 「飛行」の特性が異なる場合は、それ以外は重要ではない。あなたは "うまくいきません"と言いますが、*働きます。何が間違っていたのかを説明してください。 – Pointy

+1

文字通り、コード 'return -1/0/1'を試しましたか?それは負の「無限大」(負の値を1で割った値を1で割った値)です - それはあなたの意図ですか?あるいは、これらの値をそれぞれ別々に試してみて、何も働かないということですか? – apsillers

答えて

2

ブール値の場合でも、すべてのソート基準を論理値または||と組み合わせることができます。

var data = [{ id: 0, flight: true, priority: 1, shooterid: 2, targetid: 1 }, { id: 1, flight: true, priority: 2, shooterid: 2, targetid: 3 }, { id: 2, flight: false, priority: 1, shooterid: 1, targetid: 2 }, { id: 3, flight: false, priority: 2, shooterid: 1, targetid: 1 }, { id: 4, flight: true, priority: 1, shooterid: 1, targetid: 2 }]; 
 

 
data.sort(function (a, b) { 
 
    return (
 
     a.flight - b.flight || 
 
     a.priority - b.priority || 
 
     a.shooterid - b.shooterid || 
 
     a.targetid - b.targetid 
 
    ); 
 
}); 
 

 
console.log(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }

1

最初ifにすべきである:

減算で
if (a.flight != b.flight) 
    return a.flight - b.flight; 

、ブールtrue0として1falseとして扱われます。これは、falseのものがtrueのものよりも先に並べ替えることを意味します。

+0

あなたの答えをありがとう。私は他の答えを承認することに決めました。なぜなら、|| if/elseの代わりに。しかし、私はその推論についてのあなたの説明に感謝します。 – user431806

関連する問題