2013-06-05 2 views
0

У меня есть объект JSON, и я хочу, чтобы отсортировать его по возрастанию порядкаJson объекта сортировать по возрастанию, используя JavaScript

[{ d: "delte the text" }, { c: "copy the text" }] 

Ключ d и c создаются динамически, в следующий раз может быть изменен. Как я могу сортировать это в

[{ c: "copy the text" }, { d: "delte the text" }] 

Пожалуйста, помогите мне, как я могу это сделать. Спасибо!

+1

По возрастанию какого? Ключ или ценность? – Jon

+1

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

+2

@ PetrČihula: Это объекты в массиве, но не свойства в объекте. – Jon

ответ

1

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

Получение имен свойств объекта является наиболее удобным с Object.keys, поэтому мы имеем эту функцию сравнения:

function(x, y) { 
    var keyX = Object.keys(x)[0], 
     keyY = Object.keys(y)[0]; 

    if (keyX == keyY) return 0; 
    return keyX < keyY ? -1 : 1; 
} 

Он может быть использован, как это:

var input = [{ d: "delete the text" }, { c: "copy the text" } ]; 
var sorted = input.sort(function(x, y) { 
    var keyX = Object.keys(x)[0], 
     keyY = Object.keys(y)[0]; 

    if (keyX == keyY) return 0; 
    return keyX < keyY ? -1 : 1; 
}); 

See it in action.

Заметим, что Object.keys требует достаточно современного браузера (в частности, версии IE не менее 9); в противном случае вам нужно будет написать что-нибудь, например, как это вместо:

var keyX, keyY, name; 
for (name in x) { keyX = name; break; } 
for (name in y) { keyY = name; break; } 

See it in action.

+0

«Перерыв» на самом деле не нужен, поскольку он будет работать только надежно одно-ключи-объекты в любом случае :-) – Bergi

+0

@Bergi: True! Привычка «не делать больше, чем вам нужно». :-) – Jon

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