基于2个属性的JavaScript数组排序
我有一个JSON对象数组,看起来像这样:基于2个属性的JavaScript数组排序,javascript,arrays,Javascript,Arrays,我有一个JSON对象数组,看起来像这样: var garments [{ name: 'Garment 1', isDesignable: false, priority: 3 },{ name: 'Garment 2', isDesignable: false, priority: 1 },{ name: 'Garment 3', isDesignable: true, priority: 3 },{ name:
var garments [{
name: 'Garment 1',
isDesignable: false,
priority: 3
},{
name: 'Garment 2',
isDesignable: false,
priority: 1
},{
name: 'Garment 3',
isDesignable: true,
priority: 3
},{
name: 'Garment 4',
isDesignable: true,
priority: 2
},{
name: 'Garment 5',
isDesignable: true,
priority: 4
}];
最初,我需要按优先级对阵列进行排序,因此我执行了以下操作:
garments.sort(function (a, b) {
// By priority
return a.priority - b.priority;
});
这很好。但现在,我意识到,如果一件衣服是不可设计的,那么不管它的优先级如何,它都应该位于数组的底部。有谁能帮助我使用排序功能,使所有不可设计的服装都位于排序的底部吗?解决方案,只需一行代码
garments.sort(function (a, b) {
if (a.isDesignable == b.isDesignable) {
return a.priority - b.priority;
} else if (a.isDesignable) {
return -1;
} else {
return 1;
}
});
首先构建isDesignable和(如果相同)之间的差异,并将优先级差异应用为排序指示符
var服装=[{
名称:'Garment 1',
isDesignable:false,
优先事项:3
}, {
名称:‘服装2’,
isDesignable:false,
优先事项:1
}, {
名称:‘服装3’,
isDesignable:没错,
优先事项:3
}, {
名称:‘服装4’,
isDesignable:没错,
优先事项:2
}, {
名称:“服装5”,
isDesignable:没错,
优先次序:4
}];
//排序首先是可设计的,然后按优先级递增
服装功能a、b{
返回b.isDesignable-a.isDesignable | | a.priority-b.priority;
};
文件。书写;
//按排序而不是反转前一排序顺序进行排序
服装功能a、b{
返回a.isDesignable-b.isDesignable | | b.priority-a.priority;
};
文件。书写;我可以问一下返回1位的作用吗?这就是比较函数应该做的:返回一个值0来表示第一个元素低于、等于或高于第二个元素。返回1是指a不可设计但b可设计的情况。我不知道为什么,但此函数返回数组前面的不可设计项,然后从高到低列出优先级。我需要相反的方法,但我不能复制这个。请参见,检查浏览器的控制台。