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

标签 javascript

我正在使用 javascript 排序方法。我想按 1,4,3,0 的顺序对项目的 doc_requirement 键进行排序 但我得到的顺序是 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 } ]

最佳答案

您的排序函数应返回整数,而不是 bool 值(来源: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;
}

关于javascript - 以特定方式排序,而不是升序或降序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43409881/

相关文章:

javascript - 将我的 API token 存储在本地存储中是将 token 括在双引号中

javascript - 构造函数的 __proto__ 属性指向什么?

javascript - AngularJS - 在 Jasmine 测试用例中模拟 ngTableParams

javascript - 如何使用 Javascript 使用关闭按钮关闭滚动 super 菜单?

JavaScript。通过字符串访问属性

javascript - 删除没有 id 或 class 的 td

javascript - 如果状态改变, react 会破坏组件中的所有旧 dom 吗?

javascript - 扩展对象的类方法 - 正确的方法

JavaScript 日期偏移量

javascript - AngularJS 最佳实践 : What's the best way to 'change templates' based on object data?