Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.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
Javascript 按两个字段对JSON对象排序_Javascript_Json - Fatal编程技术网

Javascript 按两个字段对JSON对象排序

Javascript 按两个字段对JSON对象排序,javascript,json,Javascript,Json,我有以下json对象 [ {"PARTNERNAME":"Partner 1","DISTANCE":20,"TYPE":"1"}, {"PARTNERNAME":"Partner 2","DISTANCE":14,"TYPE":"2"}, {"PARTNERNAME":"Partner 3","DISTANCE":60,"TYPE":"2"}, {"PARTNERNAME":"Partner 4","DISTANCE":37,"TYPE":"1"}, {"PARTNERNAME":"Partn

我有以下json对象

[
{"PARTNERNAME":"Partner 1","DISTANCE":20,"TYPE":"1"},
{"PARTNERNAME":"Partner 2","DISTANCE":14,"TYPE":"2"},
{"PARTNERNAME":"Partner 3","DISTANCE":60,"TYPE":"2"},
{"PARTNERNAME":"Partner 4","DISTANCE":37,"TYPE":"1"},
{"PARTNERNAME":"Partner 5","DISTANCE":25,"TYPE":"2"},
{"PARTNERNAME":"Partner 6","DISTANCE":90,"TYPE":"1"},
{"PARTNERNAME":"Partner 7","DISTANCE":49,"TYPE":"1"}
]
我想先按类型排序,然后按距离排序,结果如下

[
{"PARTNERNAME":"Partner 1","DISTANCE":20,"TYPE":"1"},
{"PARTNERNAME":"Partner 4","DISTANCE":37,"TYPE":"1"},
{"PARTNERNAME":"Partner 7","DISTANCE":49,"TYPE":"1"},
{"PARTNERNAME":"Partner 6","DISTANCE":90,"TYPE":"1"},
{"PARTNERNAME":"Partner 2","DISTANCE":14,"TYPE":"2"},
{"PARTNERNAME":"Partner 5","DISTANCE":25,"TYPE":"2"},
{"PARTNERNAME":"Partner 3","DISTANCE":60,"TYPE":"2"}
]
我有下面的代码,它按一个字段排序,但我可以让它按两个字段排序。这可能吗

var sortedData = propertyArray.sort(sortByProperty('DISTANCE'));
function sortByProperty(property) {
            'use strict';
            return function (a, b) {
                var sortStatus = 0;
                if (a[property] < b[property]) {
                    sortStatus = -1;
                } else if (a[property] > b[property]) {
                    sortStatus = 1;
                }

                return sortStatus;
            };
        }
var sortedData=propertyArray.sort(sortByProperty('DISTANCE');
函数sortByProperty(属性){
"严格使用",;
返回函数(a,b){
var-sortStatus=0;
if(a[属性]b[属性])为else{
sortStatus=1;
}
返回sortStatus;
};
}

LoDash中有非常有用的功能:

console.log(u.sortBy(propertyArray,“TYPE”,“DISTANCE”)

或自定义解决方案:

函数sortBy(){
var arr=参数[0];
变量字段=[].slice.call(参数,1)
返回arr.sort(函数(a,b){
对于(变量i=0;ib[fields[i]];
}
}
返回0;
});
}

使用:

console.log(按(a,“TYPE”,“DISTANCE”)排序)

试试这个:

arr.sort(function(a, b){
    return a.TYPE === b.TYPE ? a.DISTANCE - b.DISTANCE : a.TYPE - b.TYPE
})

在这里可以找到一个非常好的答案:JSON是文本,也就是数组文字。@RobG同意,谢谢。它实际上可以是:
返回A.TYPE-b.TYPE | A.DISTANCE-b.DISTANCE
l如果类型不相等,它将在此基础上排序,如果它相等,第一个表达式将为0,因此返回距离差。非常好,工作很顺利。@RobG,添加了自定义解决方案