猿问

请问按带有日期值的单键对象数组进行排序

按带有日期值的单键对象数组进行排序

我有一个带有几个键值对的对象数组,我需要根据‘update_at’对它们进行排序:

[
    {
        "updated_at" : "2012-01-01T06:25:24Z",
        "foo" : "bar"
    },
    {
        "updated_at" : "2012-01-09T11:25:13Z",
        "foo" : "bar"
    },
    {
        "updated_at" : "2012-01-05T04:13:24Z",
        "foo" : "bar"
    }]

最有效的方法是什么?


红糖糍粑
浏览 391回答 4
4回答

萧十郎

你可以用Array.sort.下面是一个(未经测试的)示例:arr.sort(function(a,&nbsp;b){ &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;keyA&nbsp;=&nbsp;new&nbsp;Date(a.updated_at), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;keyB&nbsp;=&nbsp;new&nbsp;Date(b.updated_at); &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Compare&nbsp;the&nbsp;2&nbsp;dates &nbsp;&nbsp;&nbsp;&nbsp;if(keyA&nbsp;<&nbsp;keyB)&nbsp;return&nbsp;-1; &nbsp;&nbsp;&nbsp;&nbsp;if(keyA&nbsp;>&nbsp;keyB)&nbsp;return&nbsp;1; &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;});

Helenr

我在这里已经回答了一个类似的问题:对对象数组进行排序的简单函数对于这个问题,我创建了一个小函数,它可以做您想做的事情:function&nbsp;sortByKey(array,&nbsp;key)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;array.sort(function(a,&nbsp;b)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;x&nbsp;=&nbsp;a[key];&nbsp;var&nbsp;y&nbsp;=&nbsp;b[key]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;((x&nbsp;<&nbsp;y)&nbsp;?&nbsp;-1&nbsp;:&nbsp;((x&nbsp;>&nbsp;y)&nbsp;?&nbsp;1&nbsp;:&nbsp;0)); &nbsp;&nbsp;&nbsp;&nbsp;});}

牧羊人nacy

这个Array.Sort()方法对数组的元素进行排序,并返回该数组。小心Array.Sort()因为它不是不变..对于不可变的排序使用不可变排序.此方法是使用当前的updated_atISO格式。我们用new Data(iso_string).getTime()若要将ISO时间转换为Unix时间戳,请执行以下操作。Unix时间戳是一个我们可以对其进行简单计算的数字。我们减去第一个和第二个时间戳,结果是;如果第一个时间戳大于第二个时间戳,返回数将是正数。如果第二个数字大于第一个,则返回值为负数。如果两者相同,则返回为零。这完全符合内联函数所需的返回值。为ES6:arr.sort((a,b)&nbsp;=>&nbsp;new&nbsp;Date(a.updated_at).getTime()&nbsp;-&nbsp;new&nbsp;Date(b.updated_at).getTime());为ES5:arr.sort(function(a,b){&nbsp; &nbsp;return&nbsp;new&nbsp;Date(a.updated_at).getTime()&nbsp;-&nbsp;new&nbsp;Date(b.updated_at).getTime();});如果你改变了updated_at要成为Unix时间戳,您可以这样做:为ES6:arr.sort((a,b)&nbsp;=>&nbsp;a.updated_at&nbsp;-&nbsp;b.updated_at);为ES5:arr.sort(function(a,b){&nbsp; &nbsp;return&nbsp;a.updated_at&nbsp;-&nbsp;b.updated_at;});在这篇文章发表时,现代浏览器不支持ES6。要在现代浏览器中使用ES6,请使用巴贝尔将代码转换到ES5。预期浏览器支持ES6在不久的将来。Array.Sort()是否应将三种可能的结果之一的返回值重新计算在内:正数(第一项>第二项)负数(第一项<第二项)如果两项相等,则为0。注意,内联函数的返回值可以是任何正数或负数。Sort()不关心返回号是什么。它只关心返回值是正、负还是零。对于不可变的排序:(例如在ES6中)const&nbsp;sort&nbsp;=&nbsp;require('immutable-sort');const&nbsp;array&nbsp;=&nbsp;[1,&nbsp;5,&nbsp;2,&nbsp;4,&nbsp;3];const&nbsp;sortedArray&nbsp;=&nbsp;sort(array);你也可以这样写:import&nbsp;sort&nbsp;from&nbsp;'immutable-sort';const&nbsp;array&nbsp;=&nbsp;[1,&nbsp;5,&nbsp;2,&nbsp;4,&nbsp;3];const&nbsp;sortedArray&nbsp;=&nbsp;sort(array);从您看到的导入是一种在ES6中包含javascript的新方法,并使您的代码看起来非常干净。我个人的最爱。不可变排序不会改变源数组,而是返回一个新数组。使用const推荐用于不可变数据。
随时随地看视频慕课网APP

相关分类

Java
我要回答