2016-12-12 8 views
2

私はJavaScriptの「並べ替え」で解決策を見つけるのに苦労しています、しかしそのブールプロパティによってオブジェクトのこの配列をソートしようとしているメソッドのboolean型のプロパティでオブジェクトの配列をソートする方法それをソートしようとすると、配列の一番上の項目は 'offer = true'、 'shortlisted = true'、そして最後に 'rejected = true'となります。私は</p> <p>

var toSort = [{ 
    offer: false, 
    shortlisted: true, 
    rejected: false, 
    stage: 2 
}, { 
    offer: false, 
    shortlisted: false, 
    rejected: true, 
    stage: null 
}, { 
    offer: true, 
    shortlisted: true, 
    rejected: false, 
    stage: null 
}, { 
    offer: false, 
    shortlisted: true, 
    rejected: false, 
    stage: 1 
}]; 

これは、私は、この配列をソートするための最良の方法である

[{ 
    offer: true, 
    shortlisted: true, 
    rejected: false, 
    stage: null 
}, { 
    offer: false, 
    shortlisted: true, 
    rejected: false, 
    stage: 1 
}, { 
    offer: false, 
    shortlisted: true, 
    rejected: false, 
    stage: 2 
}, { 
    offer: false, 
    shortlisted: false, 
    rejected: true, 
    stage: null 
}] 

何を達成したい最終的な結果ですか?

+0

どのようにこれをブール値でソートしますかプロパティ?あなたはもっと具体的になりますか? –

+0

何を試しましたか?どのように失敗したのですか?どのくらい正確に配列をソートしたいですか? –

+0

これはどのフィールドがソートされていますか? – WillardSolutions

答えて

5

このようにsort()を使用できます。

var toSort = [{ 
 
    offer: false, 
 
    shortlisted: true, 
 
    rejected: false, 
 
    stage: 2 
 
}, { 
 
    offer: false, 
 
    shortlisted: false, 
 
    rejected: true, 
 
    stage: null 
 
}, { 
 
    offer: true, 
 
    shortlisted: true, 
 
    rejected: false, 
 
    stage: null 
 
}, { 
 
    offer: false, 
 
    shortlisted: true, 
 
    rejected: false, 
 
    stage: 1 
 
}]; 
 

 
var result = toSort.sort(function(a, b) { 
 
    return b.offer - a.offer || 
 
    b.shortlisted - a.shortlisted || 
 
    b.rejected - a.rejected 
 
}) 
 

 
console.log(result)

0

一つの方法は、より高い優先順位の値に対してより高いスコアを設定し、各オブジェクトに数値スコアを割り当てることです。たとえば、次のように

var scoreObj = function(o) { 
     var score = 0; 
     if(o.offer) { 
      score+=100; 
     } 
     if(o.shortlisted) { 
      score+=10; 
     } 
     if(o.rejected) { 
      score+=1; 
     } 
     return score; 
    }; 
    var sorted = toSort.sort(function(a,b){ 
     return scoreObj(b) - scoreObj(a); 
    }); 
0

簡単な方法:

toSort.sort(function(a, b){ 
    var numberA = a.offer * 5 + a.shortlisted * 3 + a.rejected; 
    var numberB = b.offer * 5 + b.shortlisted * 3 + b.rejected; 
    return numberA < numberB 
}); 

この作品はなぜ:

1)a.offerは、私たちが追加されている事実であるので、もし私たちが、0または1としてブール値を扱うことができます5〜1でない場合numberA

2)offerプロパティがtrueの場合、他のすべてがtrueであっても、最初に表示されます(5> 1 + 3 = 4であるため)

3つ以上のプロパティの場合:優先度の低いプロパティの合計より大きい数値を最初に与えたいブールプロパティに優先度を与えます。

+0

なぜ5と3ではなく4と2 ..それは私にいくつかのバイナリセンスを作るだろう.. [Nenadの答え](http://stackoverflow.com/a/41105161/4543207)でも私には良いようです。 – Redu

+0

@Redu確かに4と2もうまくいくだろうし、私はまた、他の答えが良いと信じている;) – juvian

関連する問題