以特定方式排序而不是升序或降序

问题描述:

我正在使用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

排序函数应该返回不是布尔值的数字。 –

你的排序函数应该返回整数,而不是布尔(来源: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; 
}