按升序排序JSON对象

时间:2014-03-19 18:02:02

标签: javascript jquery json

Json响应(对象)

    [{"id":"9","title":"Testing","date":"2014-02-17","time":"40"},
    {"id":"19","title":"11111111","date":"2014-02-24","time":"20"},
    {"id":"33","title":"Testing","date":"2014-02-26","time":"23"},
    {"id":"64","title":"2:00pm","date":"2014-03-18","time":"29"},
    {"id":"65","title":"4:00pm","date":"2014-03-18","time":"33"}]

以上是json对象,用于显示事件日历中的事件名称和时间。事件名称和时间在日历中正确显示。问题是事件未按时间升序显示。

我需要按升序排序Json响应。

是否可以按上述方式对Json对象进行排序。

3 个答案:

答案 0 :(得分:1)

array.sort方法应该使用自定义函数进行比较。例如:

function sortObjects(a, b) {
    return (+a.time) - (+b.time);
}

jsonObject.array.sort(sortObjects);

我使用(+ a.time)而不仅仅是a.time,因为你的例子显示了用引号括起来的时间值,使它们成为字符串。 +会将其转换为数字。

答案 1 :(得分:1)

你用PHP标记,所以一种方法:

$array = json_decode($json);

foreach($array as $key => $object) {
    $time[$key] = $object->time;
}
array_multisort($time, SORT_ASC, $array);    

print_r($array);

答案 2 :(得分:0)

您可以拥有自己的自定义比较器函数,并在数组中调用sort传递此函数

示例:

  arr.sort(function(a,b){
        var f =a.start.split("/");
        var t =b.start.split("/");
        var x =parseInt(f[2]+f[1]+f[0]);
        var y =parseInt(t[2]+t[1]+t[0]);

        return a - b;
    });

您需要此自定义比较器功能,因为javascript不知道您的对象规则。所以你需要告诉它如何比较你的对象。