我有一套看起来像这样的服装:
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
}];
有人可以告诉我如何根据需要重做其工作的排序功能吗?
答案 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?