如何对JSON数组进行排序?

时间:2012-01-19 10:26:02

标签: javascript jquery 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);

以下列顺序发出警告 -

  

柴油
      阿玛尼
      尼克松
      汉密尔顿
      LUMINOX
      DKNY
      化石
      卡西欧
      阿迪达斯
      前瞻态势
      精工
      Michael Kors
      Nooka的
      勃朗峰笔杆

但我想按以下顺序

  

阿迪达斯
      阿玛尼
      卡西欧
      柴油
      DKNY
      化石
      汉密尔顿
      LUMINOX
      Michael Kors
      勃朗峰笔       尼克松
      Nooka的
      精工
      前瞻态势
      天梭

任何人都可以建议我采取什么方法来获得正确的顺序?

非常感谢任何帮助!

5 个答案:

答案 0 :(得分:8)

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

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');

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

使用JS库underscore.js非常简单,只需:

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

答案 4 :(得分:0)

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

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;

}