【问题标题】:Merge JSON Object arrays and sort with Javascript合并 JSON 对象数组并使用 Javascript 排序
【发布时间】:2023-04-07 07:16:01
【问题描述】:

我有一个包含 12 个数组的 JSON 对象。国家不同地区。我正在尝试将此数组合并到选择下拉菜单中。 JSON 如下所示:

"latinamerica": [
        "Argentina",
        "Bolivia",
        "Brazil",
        "Chile",
        "Colombia",
        "Ecuador",
        "Paraguay",
        "Peru"
    ],
    "korea": ["South Korea"]

然后我调用 JSON:

    $.getJSON('js/countries.json', function(data) {

  var items = [];      

  items[0] = '<option value="0">Country</option>';

  $.each(data['latinamerica'], function(key, val) {
    items.push('<option value="'+ key +'">'+ val +'</option>');
  });
});

对对象中的每个数组执行此操作。问题是我想合并所有这些数组,按字母顺序对它们进行排序,但仍然保持它们关联的区域。所以基本上我会有一个所有国家/地区的下拉列表,HTML 看起来像:

<option value="latinamerica">Argentina</option>
<option value="europe">Austria</option>

我尝试过 concat,但后来我丢失了我的数组名称。建议? TIA。

【问题讨论】:

    标签: javascript jquery json


    【解决方案1】:

    你基本上需要一个不同的“模型”来生成那个“视图”:

    var countries = [];
    for (var region in data) {
      for (var i = 0, l = data[region].length; i < l; ++i) {  
        countries.push({ country: data[region][i], region: region });
      }
    }
    

    然后你对它进行排序:

    countries.sort(function(a, b) {
      if (a.country < b.country) return -1;
      if (a.country > b.country) return 1;
      return 0;
    });
    

    然后你使用它:

    var items = [];      
    
    items.push('<option value="0">Country</option>');
    for (var i = 0, l = countries.length; i < l; ++i) {
      items.push('<option value="'+ countries[i].region +'">'+ countries[i].country +'</option>');
    }
    

    (注意:所有这些代码未经测试)。

    【讨论】:

    • 请注意,b.country - a.country 也可以在排序函数中使用。
    • 优秀。我知道我需要将它们推入它们自己的数组中,但我错过了事物的多维方面。感谢您的帮助!
    【解决方案2】:
    items.sort(function(a, b) {
      if (a.innerHTML < b.innerHTML) return -1;
      else return 1;
    });
    

    在排序后添加 Country 选项。

    【讨论】:

      猜你喜欢
      • 2021-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-17
      • 1970-01-01
      • 2020-06-28
      • 2016-11-19
      • 1970-01-01
      相关资源
      最近更新 更多