2017-03-27 11 views
0

データベースから返す行があります。それらは(media_id,order,front_image)の形式で返されます。 mediaの1つは、TRUEという値のfront_imageです。私はそのようにようにソート機能を持っている:私は達成しようとしている何オーバーライド値を指定したJavascript order関数

.sort(function (m1, m2) { 
    if (m1.order < m2.order) { 
    val = -1; 
    } else if (m1.order > m2.order) { 
    val = 1; 
    } 
    return val; 
}) 

mediaTRUEfront_image値を持つ場合、それは配列の最初であることを保証することです。私はsortFunction内のまたはステートメントとして追加しようとしましたが、これは正しい結果を生成しませんでした。

+0

言及したデータを投稿してください。 –

+0

TRUEがブール値「真」ですか?それとも文字列 '' TRUE ''ですか? – trincot

+0

あなたは何を正確に試しましたか? – epascarello

答えて

1

ブール値は数値に強制変換するので0(false)の値と1(true)、あなたは次のように並べ替えることができます:

.sort(function (m1, m2) { 
    return (m2.front_image - m1.front_image) || (m1.order - m2.order); 
}) 

をしかし優先する値は文字列"TRUE"であれば、あなた可能性だけこのようなブール式にそれを回す:

.sort(function (m1, m2) { 
    return ((m2.front_image=="TRUE") - (m1.front_image=="TRUE")) || (m1.order - m2.order); 
}) 
1

一つの可能​​なアプローチ:

var input = [ 
 
    {front_image: false, order: 4}, 
 
    {front_image: false, order: 2}, 
 
    {front_image: true, order: 3}, 
 
    {front_image: false, order: 1}, 
 
    {front_image: false, order: 0} 
 
] 
 

 
var output = input.sort(function (l, r) { 
 
    return (r.front_image - l.front_image) 
 
     || (l.order - r.order) 
 
}) 
 

 
console.log(output)

1

あなたはfront_image'TRUE'あるかどうかを確認し、orderで並べ替えた後、先頭に項目を移動することができます。

var data = [{ media_id: 1, order: 7, front_image: '' }, { media_id: 3, order: 6, front_image: '' }, { media_id: 6, order: 5, front_image: 'TRUE' }, { media_id: 4, order: 4, front_image: '' }, { media_id: 5, order: 3, front_image: 'TRUE' }, { media_id: 7, order: 2, front_image: '' }, { media_id: 8, order: 1, front_image: '' }]; 
 

 
data.sort(function (a, b) { 
 
    return (b.front_image === 'TRUE') - (a.front_image === 'TRUE') || a.order - b.order; 
 
}); 
 

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

関連する問題