【问题标题】:Sorting Javascript array of objects by one value按一个值对对象的Javascript数组进行排序
【发布时间】:2018-01-14 20:02:18
【问题描述】:

问题

我正在创建一个带有 React Native 的社交媒体应用。我正在尝试从服务器上呈现该应用程序上的所有帖子。我从我的服务器收到帖子,它们不按时间顺序排列。我在每个帖子中都有一个时间戳元素。如何按此时间戳对帖子进行排序?

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

帖子对象

我的对象如下所示:

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

【问题讨论】:

  • 到目前为止您尝试过什么?除非您自己尝试并遇到问题,否则无法真正帮助您。

标签: javascript arrays sorting react-native


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    有很多方法,首先,由于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
    

    【讨论】:

    • 是的,它使用本机功能,这意味着它不需要任何链接,因此,它适用于 expo/CRNA 应用程序。试试看,我发现lodash是开发RN应用的必备模块之一
    • 谢谢!我已经接受了另一个答案,但是如果需要,我也会尝试一下。
    【解决方案3】:

    用于对字符串值进行排序

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-13
      • 2021-10-30
      • 1970-01-01
      • 2019-06-11
      • 2023-02-05
      • 2011-11-16
      • 1970-01-01
      相关资源
      最近更新 更多