2015-07-22 3 views
1

У меня есть следующий массив объектов, где ключ - это дата в формате UTC.Сортировка по ключевому слову объекта по убыванию в Javascript/underscore

Array = [{1436796000000:["Task1","Task2"], 
     1437400800000:["Task4","Task8"], 
     1436968800000: ["Task3","Task2"], 
     1436882400000:["Task5","Task6"]}] 

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

Array = [{1437400800000:["Task4","Task8"], 
      1436968800000: ["Task3","Task2"], 
      1436882400000:["Task5","Task6"], 
      1436796000000:["Task1","Task2"]}] 

Как это сделать в javascript или с использованием underscore.js?

+0

невозможно. Нет. Клавиши массивов всегда заказываются по возрастанию. Просто повторите его назад! – Bergi

ответ

4

Нет, это не массив, это объект, а свойства объектов JavaScript не упорядочены по определению; поэтому сортировка их бессмысленна.

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

var arr = [ 
    { date: 1436796000000, value: ["Task1","Task2"] }, 
    { date: 1437400800000, value: ["Task4","Task8"] }, 
    { date: 1436968800000, value: ["Task3","Task2"] }, 
    { date: 1436882400000, value: ["Task5","Task6"] } 
] 

, а затем вы можете отсортировать их по дате:

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

Если вы не» t хотите реструктурировать ваши данные, вы можете перебирать их в том порядке, в котором хотите, получая массив своих ключей и сортируя этот массив, а затем используя этот массив для доступа к свойствам вашего объекта, но вам нужно будет делать это каждый раз, когда ваш хотите перебирать его в определенном порядке, поскольку до сих пор нет заказ информации, хранящейся в объекте:

// Get the array of keys 
var keys = Object.keys(obj); 

// Sort the keys in descending order 
keys.sort(function (a, b) { return b - a; }); 

// Iterate through the array of keys and access the corresponding object properties 
for (var i = 0; i < keys.length; i++) { 
    console.log(keys[i], obj[ keys[i] ]); 
} 

Вам нужно будет Призонная шайба Object.keys для поддержки IE 8 и более старые браузеры.

+0

Я боюсь, что на самом деле это массив, используемый в качестве объекта. – Bergi

+0

@NutBoltu, Нет, после редактирования у вас есть массив только с одним элементом (поэтому он всегда является первым элементом в массиве), этот элемент является объектом и его свойства неупорядочены. – Paulpro

+0

есть ли способ заказать элемент объекта? – nutboltu

0

В Paulpro ответа я редактирую яваскрипт функцию массива сортировки (легко понять):

function compare(a,b) { 
    if (a.date < b.date) 
    return -1; 
    if (a.date > b.date) 
    return 1; 
    return 0; 
} 
arr.sort(compare); 

Вот мой пример: enter link description here

Вот относительное сообщение: enter link description here

+0

Почему так сложно? Что такое 'last_nom'? И что это связано с вопросом? – Bergi

+0

спасибо, я исправлю last_nom на сегодняшний день –

+0

Хм, в массиве OPs нет. .date. – Bergi

Смежные вопросы