【问题标题】:Sorting a JSON object by two fields [duplicate]按两个字段对 JSON 对象进行排序 [重复]
【发布时间】:2015-01-16 20:30:07
【问题描述】:

我有跟随 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;
            };
        }

【问题讨论】:

标签: javascript json


【解决方案1】:

试试这个:

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

【讨论】:

  • @RobG 同意,谢谢。
  • 它实际上可以是:return a.TYPE - b.TYPE || a.DISTANCE - b.DISTANCEl 如果 TYPE 不相等,它将对其进行排序,如果相等,则第一个表达式将为 0,因此返回距离差。
  • 非常好,很好用。
【解决方案2】:

LoDash中有一个非常有用的功能:

console.log(_.sortBy(propertyArray, "TYPE", "DISTANCE"));

或自定义解决方案:

function sortBy() { var arr = arguments[0]; var fields = [].slice.call(arguments, 1) return arr.sort(function (a, b) { for (var i = 0; i < fields.length; i++) { if (a[fields[i]] != b[fields[i]]) { return a[fields[i]] > b[fields[i]]; } } return 0; }); }

使用:

console.log(sortBy(a, "TYPE", "DISTANCE"));

http://jsfiddle.net/hpzfLq76/

【讨论】:

  • @RobG,添加了自定义解决方案
猜你喜欢
  • 1970-01-01
  • 2018-02-18
  • 2020-12-04
  • 1970-01-01
  • 2018-12-14
  • 1970-01-01
  • 2011-05-16
相关资源
最近更新 更多