[英]Alternative way to sort JSON file or at least, a drop-down list using javascript?
除了以下代码之外,还有其他方法可以排序JSON文件或至少排序一个下拉列表吗?
json.sort(function(a, b){
return a.id - b.id;
});
原因是对包含世界上所有国家/地区的JSON文件进行排序需要花费很长时间。 这是我的代码:
parseJSONFile("json/Country.json", function(data) {
data.sort(sortCountryName);
localStorage.setItem("country", JSON.stringify(data));
});
// Function for sorting Countries
function sortCountryName(a,b){
return a.spanish.toLowerCase() > b.spanish.toLowerCase() ? 1 : -1;
}
**更新 :这是JSON文件的一小部分:
{
"code" : "Please Select Country",
"english" : "-- Please Select Country --",
"spanish" : "-- Por favor seleccione el país --"
},
{
"code" : "AFG",
"english" : "Afghanistan",
"spanish" : "Afganistán"
},
{
"code" : "ALB",
"english" : "Albania",
"spanish" : "Albania"
},
{
"code" : "DZA",
"english" : "Algeria",
"spanish" : "Argelia"
},
{
"code" : "ASM",
"english" : "American Samoa",
"spanish" : "Samoa Americana"
},
如果您可以修改JSON,则只需按照@undefined所述首先将其排序,以便用户下载已经排序的数组。 如果不能,请预先计算排序字段,以减少计算次数:
var header = data.shift();
data.forEach(function(item) { item.sortkey = item.spanish.toLowerCase(); });
data.sort(function(a, b) {
var aa = a.sortkey;
var bb = b.sortkey;
if (aa == bb) return 0;
return (aa < bb) ? -1 : 1;
});
data.unshift(header);
另外,请确保这2秒确实是排序延迟,而不是加载延迟。 除了处理数据服务器端以减少内存占用外,您没有太多处理加载延迟的方法(例如,压缩以进行传输,仅修剪为指定的UI语言...)
这涉及到修改JASON文件的前期工作,这会使JSON文件的加载时间变长,因为它现在变得更大了,但是它将提高排序性能。 添加一些其他属性,包括作为整数的排序索引。 我不羡慕手动添加排序索引,然后再维护它们,但是如果文件是从数据库生成的,应该还不错。
您的JSON如下所示,对排序顺序进行了疯狂的猜测:
{
"code" : "Please Select Country",
"english" : {"name" : "-- Please Select Country --", "sortIndex" : 0},
"spanish" : {"name" : "-- Por favor seleccione el país --" : "sortIndex" : 0}
},
{
"code" : "AFG",
"english" : {"name": "Afghanistan", "sortIndex" : 1},
"spanish" : {"name": "Afganistán", "sortIndex": 1}
},
{
"code" : "ALB",
"english" : {"name" : "Albania", "sortIndex" : 2},
"spanish" : {"name" : "Albania", "sortIndex" : 2}
},
{
"code" : "DZA",
"english" : {"name" : "Algeria", "sortIndex": 3},
"spanish" : {"name" : "Argelia", "sortIndex" : 4}
},
{
"code" : "ASM",
"english" : {"name" : "American Samoa", "sortIndex": 4},
"spanish" : {"name" : "Samoa Americana", "sortIndex": 68}
},
通过您的排序功能
// Function for sorting Countries
function sortCountryName(a,b){
return a.spanish.sortIndex - b.spanish.sortIndex;
}
当然,另一个选择是为每种语言提供一个JSON文件,并对其进行预排序并动态加载所需的文件。 这可能是维护的噩梦,必须管理多种语言文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.