反转排序函数

时间:2015-10-07 14:25:28

标签: javascript arrays sorting

我有一套看起来像这样的服装:

var garments = [{
    name: 'garment 1',
    isDesignable: false,
    priority: 3
}, {
    name: 'garment 2',
    isDesignable: true,
    priority: 3
}, {
    name: 'garment 3',
    isDesignable: true,
    priority: 0
}];

如果衣服是可设计的,我需要按优先级 对这些进行排序。如果衣服不可设计,衣服应该出现在列表的底部。

我目前有这个功能(从我提出的另一个问题提供):

garments.sort(function (a, b) {
    if (a.isDesignable == b.isDesignable) {
        return a.priority - b.priority;
    } else if (a.isDesignable) {
        return -1;
    } else {
        return 1;
    }
});

这样可行,但它似乎按错误的顺序对数组进行排序。不可设计的项目首先出现在数组中,然后更高的优先级随着数组的增加而减少。 我需要的是数组的第一项具有最低优先级(在这种情况下为0),而下一项具有更高的优先级,并且数组末尾的非可设计项使得数组看起来像这样:

var garments = [{
    name: 'garment 3',
    isDesignable: true,
    priority: 0
}, {
    name: 'garment 2',
    isDesignable: true,
    priority: 3
}, {
    name: 'garment 1',
    isDesignable: false,
    priority: 3
}];

有人可以告诉我如何根据需要重做其工作的排序功能吗?

1 个答案:

答案 0 :(得分:0)

如果isDesignable不同,请按其排序,如果不是,请按priority排序:

var garments = [{
    name: 'garment 1',
    isDesignable: false,
    priority: 3
}, {
    name: 'garment 2',
    isDesignable: true,
    priority: 3
}, {
    name: 'garment 3',
    isDesignable: true,
    priority: 0
}];

var x = garments.sort(function(a, b) {
  if (a.isDesignable > b.isDesignable) return -1;
  if (a.isDesignable < b.isDesignable) return 1;
  if (a.priority < b.priority) return -1;
  if (a.priority > b.priority) return 1;
  return 0;
});

document.write('<pre><code>' + JSON.stringify(x, null, 2) + '</code></pre>');

逻辑来自Javascript, how do you sort an array on multiple columns?