сортировать глубокий объект в JavaScript - PullRequest
0 голосов
/ 29 ноября 2010

Как лучше всего отсортировать это:

{
    abc: {
        string: 'lorem',
        date: 2
    },
    enc: {
        string: 'ipsum',
        date: 1
    }
}

в это:

[{
    id: 'enc',
    string: 'ipsum',
    date: 1
},
{
    id: 'abc',
    string: 'lorem',
    date: 2
}]

Мне нужен массив, отсортированный по дате (числу) с плоским объектом.

Ответы [ 3 ]

4 голосов
/ 29 ноября 2010

Сначала вам нужно преобразовать исходный объект в массив в нужном вам формате:

var arr = [];
for (var key in obj)
  if (obj.hasOwnProperty(key)) {
    var o = obj[key];
    arr.push({ id: key, string: o.string, date: o.date });
  }

Затем вы можете использовать метод массива sort с пользовательским компаратором для сортировки по полю даты:

arr.sort(function(obj1, obj2) {
  return obj1.date - obj2.date;
});
0 голосов
/ 29 ноября 2010

Я бы сделал это в два шага: во-первых, преобразовать объект в массив:

var array = [],
   o;

for (var key in obj) {
    if (obj.hasOwnProperty(key)) {
        o = obj[key];
        o.id = key;
        array.push(o);
    }
}

Затем сортируйте это так:

array.sort(function (a, b) {
    a.date - b.date;
});
0 голосов
/ 29 ноября 2010

Это поможет.

var stuff = {
    abc: {
        string: 'lorem',
        date: 2
    },
    enc: {
        string: 'ipsum',
        date: 1
    }
};

// Put it into an array
var list = [];
for(var i in stuff) {
    if (stuff.hasOwnProperty(i)) {
        list.push(stuff[i]);
    }
}

// sort the array
list.sort(function(a, b) {
    return a.date - b.date;
});

Смотри также:
https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference:Global_Objects:Array:sort

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...