我正在构建一个涉及jQuery移动目录的应用程序,该目录从JSON文件加载三个名称部分。我想知道是否有一种方法可以自动对JSON数组中的项进行字母顺序排列。委托应用程序的人将来需要添加项目,如果他们不必担心自己按字母顺序添加项目,则会更容易。由于IP,我在这里添加了稍微不同的代码,但它应该以相同的方式工作。为了澄清,正确的代码只有" name",而不是" firstName"和lastName",所以必须按姓氏排序。
编辑:我意识到这个问题是重复的,我不确定我能证明它的独特之处,但是对我有用的解决方案没有在另一页上给出,所以该页面我不会回答我的问题。
HTML:
var length = 5;
var re = RegExp("(?:\\s|^)(.{1," + length + "})(?=\\s|$)", "g");
var str = 'My cool code on StackOverflow.';
var res = [];
while ((m = re.exec(str)) !== null) {
res.push(m[1]); // Your value is in Group 1
}
document.body.innerHTML = "<pre>" + JSON.stringify(res, 0, 4) + "</pre>"; // just demo
JavaScript的:
<div data-role="page" id="home">
<div data-role="header">
<h1>Star Trek: The Next Generation</h1>
</div>
<div data-role="main" class="ui-content">
<div data-role="collapsible" data-collapsed="true">
<h2>Humans</h2>
<ul id="humans" data-role="listview" data-filter="true" data-inset="true" data-icon="user" data-autodividers="true">
</ul>
</div>
<div data-role="collapsible" data-collapsed="true">
<h2>Robots</h2>
<ul id="robots" data-role="listview" data-filter="true" data-inset="true" data-icon="gear" data-autodividers="true">
</ul>
</div>
<div data-role="collapsible" data-collapsed="true">
<h2>Wesley</h2>
<ul id="wesleys" data-role="listview" data-filter="true" data-inset="true" data-icon="forbidden" data-autodividers="true">
</ul>
</div>
</div>
</div>
JSON:
$(document).ready( function() {
$.getJSON("assets/js/starTrek.json", function(data){
$.each(data.enterprise.humans, function(){
$("ul#humans").append('<li>' + '<a href="#' + this["url"] + '" data-transition="slide">'+ this["firstName"] + ' ' + this["lastName"] + '</a>' + '</li>');
$("ul#humans").listview("refresh");
});
$.each(data.enterprise.robots, function(){
$("ul#robots").append('<li>' + '<a href="#' + this["url"] + '" data-transition="slide">'+this["firstName"] + ' ' + this["lastName"] + '</a>' + '</li>');
$("ul#robots").listview("refresh");
});
$.each(data.enterprise.wesleys, function(){
$("ul#wesleys").append('<li>' + '<a href="#' + this["url"] + '" data-transition="slide">'+ this["firstName"] + ' ' + this["lastName"] + '</a>' + '</li>');
$("ul#wesleys").listview("refresh");
});
});
})
答案 0 :(得分:1)
试试这个:
data.enterprise.humans.sort(function(a, b) {
return a.firstName.localeComapre(b.firstName);
});
答案 1 :(得分:1)
最高性能的解决方案可能是查询已经排序的数据(例如,如果数据来自数据库,这相对来说是微不足道的)。您还可以选择在服务器端进行排序。在前端,您可以使用例如
data.enterprise.humans.sort(function(first, second) {
return first.name.localeCompare(second.name);
});
您应该对data.enterprise.robots和data.enterprise.wesleys执行相同操作,方法是重复代码或编写循环,例如:
for (key in data.enterprise) {
data.enterprise[key].sort(function(first, second) {
return first.name.localeCompare(second.name);
});
}
请注意,后者仅在data.enterprise中的所有子数组都包含具有名称的对象时才有效。