将元素放在排序列表的最后

时间:2017-04-17 06:51:17

标签: javascript

我在doc_status的基础上使用sort函数对项进行排序。 当doc_requirment = 0时,一切都很好。我希望它是项目的最后一个元素,而不管它的doc_status。

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

if(lockStatus == 2){
  var finalSortedDocuments = items.sort(function(firstDoc,secondDoc){
        var order = [2,0,1,3];
        if(firstDoc.doc_status == secondDoc.doc_status && firstDoc.doc_status ==0){
        var orderNew = [ 1,4];
        return  orderNew.indexOf(firstDoc.doc_requirement) - orderNew.indexOf(secondDoc.doc_requirement);
       }
       return order.indexOf(firstDoc.doc_status) - order.indexOf(secondDoc.doc_status);
    });
  }

3 个答案:

答案 0 :(得分:0)

尝试这样的事情 -

items.sort(function(doc1,doc2){
  if(doc1.doc_requirement=== 0){
    return 1;
  }
  if(doc2.doc_requirement=== 0){
    return -1;
  }
   return doc1.doc_status > doc2.doc_status;
  })

答案 1 :(得分:0)

您只需要为排序功能添加一个标准:

items.sort(function(firstDoc, secondDoc) {
    if(firstDoc.doc_requirement == 0 && secondDoc.doc_requirement != 0) return 1;
    else if(firstDoc.doc_requirement != 0 && secondDoc.doc_requirement == 0) return -1;
    // Then sort by doc_status
    var order = [2,0,1,3];
    return (order.indexOf(firstDoc.doc_status) - order.indexOf(secondDoc.doc_status));
});

答案 2 :(得分:0)

您可以尝试这样

var finalSortedDocuments = items.sort(function(firstDoc,secondDoc){
    if(firstDoc.doc_status== 0){
         return(1);
    }
    if(secondDoc.doc_status== 0){
         return(-1);
    }
    return firstDoc.doc_status-secondDoc.doc_status;
});