按值对 JSON 进行排序 [重复]
Posted
技术标签:
【中文标题】按值对 JSON 进行排序 [重复]【英文标题】:Sort JSON by value [duplicate] 【发布时间】:2016-06-05 04:50:17 【问题描述】:如何按名称排序我的 json 文件 -> 值?我想按标签名称的 asc 值显示。知道如何转换我的 json 文件吗?
这是我的 JSON 文件的外观:
[
"id": "105",
"name": "FIAT",
"active": true,
"parentId": "1"
,
"id": "106",
"name": "AUDI",
"active": true,
"parentId": "1"
,
"id": "107",
"name": "BMW",
"active": true,
"parentId": "1"
,
"id": "109",
"name": "RENAULT",
"active": true,
"parentId": "1"
]
如果有人帮助我,我将不胜感激。提前致谢。
【问题讨论】:
你是在客户端还是服务器端排序? 您使用的是 php 还是 javascript? 您应该提供更多信息;如前所述,我们需要知道您想在 Php 或 js 中执行此操作(例如,如果您想在客户端执行此操作,您甚至不必更改 JSON,只需在 js 上使用 _ 对数组进行排序。排序()) 您是要按name
的值对整个对象数组进行排序,还是要对每个单独的对象进行排序,以便键按字母顺序显示?
【参考方案1】:
我建议使用Array#sort()
var data = [
"id": "105", "name": "FIAT", "active": true, "parentId": "1" ,
"id": "106", "name": "AUDI", "active": true, "parentId": "1" ,
"id": "107", "name": "BMW", "active": true, "parentId": "1" ,
"id": "109", "name": "RENAULT", "active": true, "parentId": "1"
];
data.sort(function (a, b)
return a.name.localeCompare(b.name);
);
document.write('<pre>' + JSON.stringify(data, 0, 4) + '</pre>');
【讨论】:
localeCompare 支持是否足够广泛? @Matthijs,你说的extensive是什么意思? 我说的是浏览器支持。原来 Safari 不支持您描述的区域设置比较;因此,如果您以此为目标,则需要另一种类型的比较。 是的,没错。a.name - b.name
【参考方案2】:
非常直接。
var data = [
"id": "105", "name": "FIAT", "active": true, "parentId": "1" ,
"id": "106", "name": "AUDI", "active": true, "parentId": "1" ,
"id": "107", "name": "BMW", "active": true, "parentId": "1" ,
"id": "109", "name": "RENAULT", "active": true, "parentId": "1"
];
data.sort(function(a, b)
return a.name > b.name;
);
console.log(data);
【讨论】:
你实际上是调用了2次data.sort(),第二次调用是多余的 我们不能用return a.name - b.name
代替return a.name > b.name;
以上是关于按值对 JSON 进行排序 [重复]的主要内容,如果未能解决你的问题,请参考以下文章