2016-08-16 11 views
1

私はこのように見えるオブジェクトの配列を持っている:boolean propとname propに基づいて配列をソートする方法は?

[ 
    { 
    name: s1, 
    isDefault: false 
    }, 
    { 
    name: s2, 
    isDefault: true 
    }, 
    { 
    name: s3, 
    isDefault: false 
    } 
] 

私はisDefault: true持つ要素が最初に配置されるように、この配列をソートし、そして残りはアルファベット順にこのオブジェクトを追跡したいです。言い換えれば

[ 
    { 
    name: s2, 
    isDefault: true 
    }, 
    { 
    name: s1, 
    isDefault: false 
    }, 
    { 
    name: s3, 
    isDefault: false 
    } 
] 

私は最初の条件を達成する方法を知っている:

objPanoramas.sort((a, b) => { 
    return a.isDefault < b.isDefault 
}) 

にはどうすれば第二の条件を統合することができますか?

答えて

1

あなたは(http://www.w3schools.com/jsref/jsref_sort.asp)[コールバックから正、ゼロまたは負の値]を返す必要があり、この

objPanoramas = [{ 
 
    name: "s1", 
 
    isDefault: false 
 
},{ 
 
    name: "s1", 
 
    isDefault: true 
 
}, { 
 
    name: "s2", 
 
    isDefault: true 
 
}, { 
 
    name: "s3", 
 
    isDefault: false 
 
}] 
 

 

 
objPanoramas.sort((a, b) => { 
 
    if ((a.isDefault && b.isDefault) || (!a.isDefault && !b.isDefault)) { 
 
    return a.name.localeCompare(b.name) 
 
    }else{ 
 
    return !a.isDefault 
 
    } 
 
}) 
 

 
console.log(objPanoramas);

+0

を試してみてください。あなたのソリューションは自動タイプ変換のために動作しますが、それはベストプラクティスではありません。 –

+0

私はあなたの提案に基づいて私の答えを編集します...ありがとう – Vanojx1

+0

私はこれで出てきました: 'objPanoramas.sort((a、b)=> { if(a.isDefault!== b.isDefault){ 戻り値a.isDefault b.name } 'あなたのコードと同じことをしますか? – alexchenco

1

あなたはcallback of sortから正の値、ゼロまたは負を返す必要があります:

objPanoramas.sort((a, b) => { 
    if(a.isDefault == b.isDefault) { 
     return a.name.localeCompare(b.name); //in case both values are equal do alphabetical sort 
    } else if(a.isDefault) { 
      return 1; //else if a.isDefault is true return positive value. 
    } 
}) 
1
objPanoramas.sort((a, b) => { 
    if (a.isDefault == b.isDefault) { 
    name1 = a.name; 
    name2 = b.name; 
    return name1<name2?-1:(name1>name2?1:0) 
    } 
    return a.isDefault < b.isDefault 
}) 
0

これは何が必要exactelyです:

https://stackoverflow.com/a/4576720/6482090

あなたはこの記事に見ることができるように解決策は、あなたのソートの中の両方の値をチェックすることです()。

その投稿の例を見てください!

関連する問題