javascript сортировать объект объектов - PullRequest
0 голосов
/ 14 июля 2011

У меня есть объект объектов. (потому что я хочу использовать ассоциативный массив, поэтому объект объектов, а не числовой массив объектов)

var tasks=new Object();

for(...){
tasks[foo-i]={};
tasks[foo-i].index=....;
tasks[foo-i].name=...;
}

У меня есть функция, которая выводит названия задач, но они должны быть в соответствии с индексом в порядке возрастания. Итак, мне понадобится временная функция сортировки. Как бы Вы это сделали? Спасибо

Ответы [ 3 ]

0 голосов
/ 14 июля 2011

Вы можете вставить все имена во временный массив, а затем вызвать метод sort() для этого массива.Проверьте эту ссылку

С уважением

0 голосов
/ 14 июля 2011

Вы можете передать функцию в метод sort объекта Array, который используется для определения порядка объектов в массиве.По умолчанию это делается в алфавитном и числовом формате, но числовой способ немного запутан.Вот как я могу решить ваш случай, предполагая, что индексы, которые вы используете для их сортировки, являются числовыми:

tasks.sort(function(obj1,obj2){
    return obj1.index - obj2.index;
});

Функция, переданная методу сортировки, должна возвращать положительное целое число, если object1> object2,0, если object1 = object2, и отрицательное целое число, если object1

0 голосов
/ 14 июля 2011

Вариант 1. Вывод в порядке ключей на объекте задачи:

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

var indexArray = [];
var i;
for (i in tasks) {
    indexArray.push(i);   // collect all indexes
}
indexArray.sort(function(a,b) {return(a-b);});  // sort the array in numeric order
for (i = 0; i < indexArray.length; i++) {
    console.log(tasks[indexArray[i]].name);
}

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

Вариант 2: Вывод в порядке задач встроенного индекса [i] .index:

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

var sorted = [];
var i;
for (i in tasks) {
    sorted.push(tasks[i]);   // collect items from tasks into a sortable array
}
sorted.sort(function(a,b) {return(a.index - b.index);});  // sort the array in numeric order by embedded index
for (i = 0; i < sorted.length; i++) {
    console.log(sorted[i].name);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...