2015-02-18 3 views
-2

После цикла я получил следующий массив. Можно ли сортировать это с текущей даты до последней.Javascript sorting Дата объекта

//Sortering 
    var arr = {}; 
    var key = ""; 
    var teller = 0; 
    for (var i = 0; i < schedule_id.length; i++) { 

    //Ajax call maken 
    $.ajax({ 
     url: "http://api.viewer.zmags.com/schedules/" + schedule_id[i] + "?key=" + api_key 
    }) 
    //WdInit after 10 calls 
    .done(function(data){ 

     //Check publicatieID is not null 
     if (undefined === data.scheduleEntries[default_pub]|| null === data.scheduleEntries[default_pub]) { 
     } 
     else 
     {  

      var key = schedule_id[teller]; 
      //loopen doorheen resultaat call 
      $.each(data.scheduleEntries, function(index, entry){ 
       arr[key] = entry.startDate; 
      }) 
     } 
     teller++; 
    }) 
    } 

arr: Object 
7aaabbec: "2015-02-09T23:00:00.000Z" 
31ba19e7: "2015-02-24T23:01:00.000Z" 
31ff78e7: "2015-02-24T23:01:00.000Z" 
159a11a7: "2015-02-10T23:01:00.000Z" 
1339d0e9: "2015-02-17T23:01:00.000Z" 

код, который я уже получил, но сообщение об ошибке: Не определено не является функцией

 arr.sort(function(a, b) { 
      return a - b; 
     }); 
+0

, что вы имеете в виду любовника выше? в какой основе? –

+0

Ну, можете ли вы рассказать нам больше о 'arr' –

+3

'Object'! =' Array' – Hacketo

ответ

-1

обернув объект, получить все Даты эс в массив и отсортировать их и сделать объект снова

  var myObj = { 
       '7aaabbec': "2015-02-09T23:00:00.000Z", 
       '31ba19e7': "2015-02-24T23:01:00.000Z", 
       '31ff78e7': "2015-02-24T23:01:00.000Z", 
       '159a11a7': "2015-02-10T23:01:00.000Z", 
       '1339d0e9': "2015-02-17T23:01:00.000Z" 
      }; 
      var timeArray = [], newObj = {}; 
      for(var key in myObj){ 
       timeArray.push([key,myObj[key]]); 
      } 
      timeArray.sort(function(a, b) {return new Date(a[1]) - new Date(b[1])}); 
      //console.log(timeArray); 
      var j=0,k=1; 
      for(var i=0;i<timeArray.length;i++){ 
       newObj[timeArray[i][j]] = new Date(timeArray[i][k]); 
      } 
      $("#result").html(JSON.stringify(newObj)); 

Работа пример является here

+0

И, снова создав объект, вы отбрасываете заказ. Да, на практике это может часто приводить к «упорядоченному объекту», просто из-за деталей реализации. Однако ** ничто не гарантирует порядок свойств объекта. ** Вы полагаетесь на полностью неопределенное поведение, которое может или не может разорваться в любое время при определенных обстоятельствах. – deceze

+0

Спасибо, я не проверял FF, создавая новый объект, порядок меняется. Я пытаюсь решить эту проблему. –

1

объекты не имеют порядка. Вы не можете заказать объект. Вы должны сначала включить это в массив, который, в свою очередь, не может иметь произвольные ключи, но упорядочен.

В Javascript:

  • объекты: Коллекции ключ-значение с неопределенным порядка
  • массивы: списки с порядком, но без ключей (содержательных)
+0

Я обновил свой вопрос – Timvdb92

+0

хорошее объяснение .. –

+0

Вы можете создать массив объектов, а затем отсортировать этот массив. –

0

Используйте нормальный массив для хранения значений так что вы можете заказать их:

arr = []; 
loopen doorheen resultaat call 
$.each(data.scheduleEntries, function(index, entry){ 
    arr.push({'key':key, 'date':entry.startDate}); 
}) 

arr.sort(function(a, b){ 
    return a['date'] > b['date']; //this may need a better comparision... 
}); 

U Бновить: извлечь хэш-ключи после сортировки только петли массива:

var sorted_keys = []; 
for(var i = 0; i < arr.length; i++){ 
    sorted_keys.push(arr[i]); 
} 
+0

Я использовал объект как своего рода HashMap. Часть даты предназначена только для сортировки, но позже я хочу прокрутить ключи и использовать этот ключ для моих функций.Возможно ли это в вашем решении? – Timvdb92

+0

вы можете их концы вырезать даты или ключи после сортировки, см. Обновление –

+1

'array.push' - это метод, который вы назначаете ему. – Jamiec

0

Первые получить ключи от объекта, можно использовать что-то вроде underscore.js для этого:

var keyList = _.keys(arr); 

// sort keyList 
keyList = keyList.sort(); 

// Now, do anything by getting values for sorted keys 
for (key in keyList) { 
    console.log(arr[ key ]); 
} 

Просто читать ваши последний комментарий ... для вашего дела вы можете сделать это, необходимо сначала преобразовать в список списков или список ключей VAL пара

// convert into List of [ key, value ] 
val pairList = _.pairs(arr); 

// sort using values 
pairList = pairList.sort(function(a, b) { 
    // use moment.js to get date functions 
    var aMoment = moment(a[ 1 ]) 
    var bMoment = moment(b[ 1 ]) 

    // change based on reverse-sorted or sorted. 
    return bMement.diff(aMement); 
}); 

// Now sorted use as you want 
for (keyVal in pairList) { 
    console.log(keyVal[ 0 ] + " -> " + keyVal[ 0 ]); 
} 
Смежные вопросы