2012-01-19 2 views
4

Как вывести этот элемент JSON в правильном порядке по его значению?Как я могу отсортировать массив JSON?

var json = { 
    "message": { 
     "90": "Adidas", 
     "2": "Armani", 
     "89": "Casio", 
     "1": "Diesel", 
     "72": "DKNY", 
     "88": "Fossil", 
     "4": "Hamilton", 
     "6": "Luminox", 
     "99": "Michael Kors", 
     "968": "Mont Blanc Pens", 
     "3": "Nixon", 
     "959": "Nooka", 
     "92": "Seiko", 
     "91": "Tendence", 
     "7": "Tissot" 
    } 
}; 

var str = ''; 
for (var i in json.message) { 
    str += json.message[i]+'\n'; 
} 
alert(str); 

он предупреждает в ниже порядке -

Diesel
Armani
Никсон
Гамильтон
Luminox
DKNY
Fossil
Casio
Adidas
Tendence
Seiko
Michael Kors
Nooka
Mont Blanc Ручки

Но я хочу его в ниже порядке

Adidas
Armani
Casio
Diesel
DKNY
Ископаемые
Гамильтон
Luminox
Michael Kors
Mont Blanc Ручки
Никсон
Nooka
Seiko
Tendence
Tissot

Может ли кто-нибудь предложить мне, какой подход я должен принять, чтобы получить правильный порядок?

Любая помощь была бы принята с благодарностью!

+0

объекты (не массив, это только PHP который использует такие вещи, как ассоциативные массивы), не имеют своих ключей в любом порядке, хотя большинство JS VM сохраняют порядок, в который они были добавлены. Но, поскольку на это нельзя положиться, вам нужно сгенерировать только массив значений , а затем просто отсортируйте это (как показывают другие ответы). –

ответ

8

Предполагая, что вы хотите элементы, перечисленные в алфавитном порядке по их стоимости:

var values = []; 
for(var i in json.message) { 
    values.push(json.message[i]); 
} 
var str = values.sort().join('\n'); 

Update

Чтобы сформировать массив пар ключ-значение, упорядоченные по их значению (строка):

var values = []; 
for(var i in json.message) { 
    values.push({ key: i, value: json.message[i] }); 
} 
values.sort(function(a, b) { return a.value.localeCompare(b.value); }); 
var str = values.map(function (kvp) { return kvp.value; }).join('\n'); 
+0

Спасибо большое @ rich.okelly :) Я рассматривал возможность сортировки json-объекта, но ваше предложение также работает. –

+0

Можно сохранить ключ сортированного массива? –

+0

@VikasNaranje См. Обновление! –

0

Добавить ведущий 0 к каждому индексу. Например:

var json = { 
    "message": { 
     "090": "Adidas", 
     "02": "Armani", 
     "089": "Casio", 
     "01": "Diesel", 
     ... 
+0

OP хочет его в алфавитном порядке _value, _ not by _index_ (ключ). Но даже если бы они говорили о сортировке по индексу, как добавить добавление ведущих нулей в _all_ indexes? – nnnnnn

+0

При переходе через ассоциированные массивы некоторые браузеры не возвращают ключи в добавленном порядке. http://code.google.com/p/v8/issues/detail?id=164 – Janath

+0

Я знаю. Но почему вы думаете, что добавление ведущих нулей поможет? – nnnnnn

1
var message = object.message; 
var brands = Object.keys(message) 
       .map(function(key) { return message[key]; }) 
       .sort(); 

alert(brands.join('\n')); 
0

с помощью JS библиотеки undescore.JS довольно легко, просто сделать:

json.message=_.sortBy(json.message,function(i){return i;}) 
0

Вы можете отсортировать его таким образом, это своего рода basied на значениях:

function sortJsonMap(data){ 

var values = []; 
var keys = []; 

for(var i in data) { 
    keys.push(i); 
    values.push(data[i]);      
} 
values.sort(); 
var map = new Object(); 
for(var i in values) { 
    map[keys[i]]=values[i]; 
} 
return map; 

}

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