繁体   English   中英

使用javascript对JSON文件或至少一个下拉列表进行排序的另一种方法?

[英]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&#237s --"
},
{
    "code" : "AFG",
    "english" : "Afghanistan",
    "spanish" : "Afganist&#225n"
},
{
    "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&#237s --" : "sortIndex" : 0}
},
{
    "code" : "AFG",
    "english" : {"name":  "Afghanistan", "sortIndex" : 1},
    "spanish" : {"name":  "Afganist&#225n", "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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM