Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于2个属性的JavaScript数组排序_Javascript_Arrays - Fatal编程技术网

基于2个属性的JavaScript数组排序

基于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:

我有一个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: '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可设计的情况。我不知道为什么,但此函数返回数组前面的不可设计项,然后从高到低列出优先级。我需要相反的方法,但我不能复制这个。请参见,检查浏览器的控制台。