2017-04-14 8 views
0

私はjavascriptのソート方法を使用しています。アイテムのdoc_requirementキーを1,4,3,0の順にソートしたいのです しかし、私が手にしている注文は4,3,1,0です。 昇順または降順でソートするのではなく、特定の順序を達成するにはどうすればよいですか?昇順または降順ではなく特定の方法で並べ替え

var items = [ 
    { doc_requirement :4}, 
    { doc_requirement: 3 }, 
    { doc_requirement:3 }, 
    {doc_requirement: 0 }, 
    { doc_requirement: 1 }, 
    { doc_requirement: 3 } 
]; 

items.sort(function(firstDoc, secondDoc) { 
if(firstDoc.doc_requirement < secondDoc.doc_requirement){ 
         return true; 
        } else if(firstDoc.doc_requirement == secondDoc.doc_requirement){ 
         return true; 
        } else{ 
         return false; 
        } 
}); 

出力は

var items =[ { doc_requirement: 1 }, 
     { doc_requirement: 4 }, 
     { doc_requirement: 3 }, 
     { doc_requirement: 3 }, 
     { doc_requirement: 3 }, 
     { doc_requirement: 0 } ] 
+0

を読む[Array.prototype.sort()](https://developer.mozilla.org/ en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#パラメータ)API – Oneiros

+0

1,4,3,0とはどういう意味ですか?常に最初に1つ、次に最も高い数になるか?精巧な..! – dotTutorials

+0

Sort関数はbooleanでない数値を返す必要があります。 –

答えて

3

あなたのソート機能は、整数、ブール値ではない(出典:Array.prototype.sort())を返すべきであると予想。それは次のようになります。

function compare(a, b) { 
    if (a is less than b by some ordering criterion) { 
    return -1; 
    } 
    if (a is greater than b by the ordering criterion) { 
    return 1; 
    } 
    // a must be equal to b 
    return 0; 
} 

をお使いの場合は、あなたがこれを使用することができます

function compare(a, b) { 
    var order = [1, 4, 3, 0]; 
    var i1 = order.indexOf(a.doc_requirement); 
    var i2 = order.indexOf(b.doc_requirement); 
    return i1 - i2; 
} 
関連する問題