2017-04-14 76 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#Parameters)API – Oneiros

+0

你是指1,4,3,0是什麼意思?總是1首先,然後是最高的數字或?闡述..! – dotTutorials

+0

排序函數應該返回不是布爾值的數字。 –

回答

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; 
}