按一个值对Javascript对象数组进行排序

时间:2018-01-14 20:02:18

标签: javascript arrays sorting react-native

问题

我正在创建一个反应原生的社交媒体应用。我试图从服务器上渲染该应用程序上的所有帖子。我从我的服务器上收到帖子,但它们的时间顺序不合适。我在每个帖子中都有一个时间戳元素。如何按此时间戳对帖子进行排序?

我只包含了我认为是这个问题的基本信息,所以请询问您是否需要对某些内容进行更多说明。

帖子对象

我的对象看起来像这样:

    Array[
      Object {
         //...
         "time": 1515892254405,
       },
       Object {
         //...
         "time": 1515882632486,
      },
    ]

3 个答案:

答案 0 :(得分:1)

尝试使用标准的Array.sort()和compare函数来比较每个对象的time属性。



let arr = [{"time": 1515892254405},{"time": 1515882632486}];
arr.sort(function(a, b) {return a.time - b.time}); // sorts in ascending order
console.log(arr);
arr.sort(function(a, b) {return b.time - a.time}); // sorts in descending order
console.log(arr);




更多信息: https://www.w3schools.com/jsref/jsref_sort.asp

答案 1 :(得分:0)

有很多方法,首先,因为objects是一个数组,所以你可以这样做:

items.sort(function (item_1, item_2) {
    const { time: t1 } = item_1;
    const { time: t2 } = item_2;

    // This will sort your objects from latest to oldest
    if (t1 > t2) {
        return -1;
    } else if (t1 < t2) {
        return 1;
    } return 0;

    // This will sort your objects from oldest to latest
    // if (t1 > t2) {
    //     return 1;
    // } else if (t1 < t2) {
    //     return -1;
    // } return 0;
});

或者,您可以安装lodash模块,这非常有用:

npm install --save lodash

然后在你的应用中,

import _ from 'lodash';
_.sortBy(items, 'time');    // oldest to latest
// _.sortBy(items, 'time').reverse(); // latest to oldest

答案 2 :(得分:0)

用于对字符串值进行排序

const sortedData = contacts.sort((a, b) => a.name.localeCompare(b.name))