如何对JSON数组进行排序

How can I sort my JSON array?

本文关键字:排序 数组 JSON      更新时间:2023-09-26

如何根据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);

它按以下顺序发出警报-

柴油
阿玛尼
尼克松
汉密尔顿
Luminox
DKNY
化石
卡西欧
阿迪达斯
倾向
精工
Michael Kors
努卡
勃朗峰钢笔

但我希望它按以下顺序

阿迪达斯
阿玛尼
卡西欧
柴油
DKNY
化石
汉密尔顿
Luminox
Michael Kors
勃朗峰钢笔
尼克松
努卡
精工
倾向
天梭

有人能建议我应该采取什么方法来获得正确的顺序吗?

如有任何帮助,我们将不胜感激!

假设您希望元素按其值按字母顺序列出:

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

更新

要形成按(字符串)值排序的键值对数组:

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');
var message = object.message;
var brands = Object.keys(message)
               .map(function(key) { return message[key]; })
               .sort();
alert(brands.join(''n'));

为每个索引添加一个前导0。例如:

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

使用JS库unscore.JS非常简单,只需执行:

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

您可以通过这种方式对其进行排序,这是一种基于值的排序:

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;

}