合并JSON对象数组并使用Javascript进行排序

时间:2011-08-29 15:36:09

标签: javascript jquery json

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

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

然后我用JSON调用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>');
  });
});

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

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

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

2 个答案:

答案 0 :(得分:4)

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

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>');
}

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

答案 1 :(得分:0)

items.sort(function(a, b) {
  if (a.innerHTML < b.innerHTML) return -1;
  else return 1;
});

排序后添加国家/地区选项。