在包含对象

时间:2016-12-23 19:52:45

标签: javascript arrays sorting object

我有以下数据结构:

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;

      });

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

3 个答案:

答案 0 :(得分: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))
});

答案 1 :(得分:0)

假设一个带有日期属性的对象的有效数组,您可以将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; }




答案 2 :(得分:0)

部分答案

请注意,在JavaScript中,数组是使用以下语法创建的:

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

要按照您希望的方式设置数组,您可以制作2D数组(有关详细信息,请参阅here),如下所示:

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

或者,您也可以使用Objects作为项目创建一个数组,如下所示:

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