【问题标题】:Sorting date values inside an array that also contains objects在还包含对象的数组中对日期值进行排序
【发布时间】:2016-12-23 19:52:44
【问题描述】:

我有以下数据结构:

var array = [
2016-11-24: Object,
2016-11-25: Object,
2016-11-26: Object,
2016-11-27: Object,
2016-11-28: Object
]

我想将数组从最旧的数据排序到最新的数据,但我在让它工作时遇到了一些麻烦。我一直在关注这个资源 (Sort Javascript Object Array By Date),但数组不会排序。

我相信对象可能会影响这一点,但我不确定当数组中有对象时如何使用 sort()。

我错过了什么?

编辑:

更多信息。我正在通过一个如下所示的 .each() 函数来构建它:

var retentionValues = [];

jQuery.each(results.values(), function( a, b ) {

        var retentionData = {};

        //Go deeper into the object under each data
         $.each(b, function(c, d){

                //Add People values into object
                if (c === "first") {
                  retentionData["People"] = d;
                } else { //Add values for specific days or weeks

                  //Go into object under counts
                  $.each(d, function(e, f){ 
                    retentionData["Retention Day " + e] = f;
                  })

                }

          })

        //Push dates into array and create object for data
        retentionValues[a] = retentionData;

      });

我需要数组的键是日期,因为我将它传递给另一个函数,但我需要在此之前对数据进行排序。

【问题讨论】:

  • 您的阵列到底是什么样的?你试过什么代码?
  • 您的数组看起来无效。要么它是一个具有属性的对象,那么没有排序可以改变顺序,或者你有一个对象数组,那么一个顺序是可能的。
  • @Mottie 我尝试使用 sort() 并编写一个短函数来比较两个值(a,b)。
  • @NinaScholz 显示实际数组结构的最佳方式是什么?开发者控制台的屏幕截图是否有效?
  • @RubenUgarte,你可以使用 JSON.stringify 和一个分隔符并显示字符串,你得到上面的字符串形式。

标签: javascript arrays sorting object


【解决方案1】:

正如 Nina Scholz 所说,您的数组似乎无效。

这是组织数据并对其进行排序的方法之一:

var array = [
  { date:'2016-11-24', obj: Object},
  { date:'2016-11-25', obj: Object},
  { date:'2016-11-22', obj: Object},
  { date:'2016-11-27', obj: Object},
  { date:'2016-11-28', obj: Object}
];

var sortedArr = array.sort(function (a, b) {
  return (new Date(a.date) > new Date(b.date))
});

【讨论】:

    【解决方案2】:

    假设一个包含具有日期属性的对象的有效数组,您可以将ISO 8601 日期字符串视为字符串,而无需转换为日期对象,因为它是可直接排序的。

    Array#some 原位排序,即原数组已排序。

    var array = [{ date: '2016-11-24', obj: { pos: 0 } }, { date: '2016-11-25', obj: { pos: 1 } }, { date: '2016-11-22', obj: { pos: 2 } }, { date: '2016-11-27', obj: { pos: 3 } }, { date: '2016-11-28', obj: { pos: 4 } }];
    
    array.sort(function (a, b) {
        return a.date.localeCompare(b.date);
    });
    
    console.log(array);
    .as-console-wrapper { max-height: 100% !important; top: 0; }

    【讨论】:

      【解决方案3】:

      部分回答

      请注意,在 JavaScript 中,数组的语法如下:

      var array = [
      item1,
      item2,
      ...
      ];
      

      要按照您想要的方式设置数组,您可以制作一个二维数组(有关详细信息,请参阅here):

      var array = [
      [2016-11-24, Object],
      [2016-11-25, Object],
      [2016-11-26, Object],
      [2016-11-27, Object],
      [2016-11-28, Object]
      ]
      

      或者,您也可以创建一个以对象为项目的数组,如下所示:

      var array = [
      {2016-11-24 : Object},
      {2016-11-25 : Object},
      {2016-11-26 : Object},
      {2016-11-27 : Object},
      {2016-11-28 : Object}
      ]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-06
        • 1970-01-01
        • 2016-11-05
        • 1970-01-01
        相关资源
        最近更新 更多