我从ajax调用返回了这个json对象(结果):
{
"2": "Buenos Aires",
"3": "Catamara",
"16": "Chaco",
"17": "Chubut",
"1": "Ciudad Aut\u00f3noma de Buenos Aires",
"4": "C\u00f3rdoba",
"5": "Corrientes",
"6": "Entre R\u00edos",
"18": "Formosa",
"7": "Jujuy",
"21": "La Pampa",
"9": "La Rioja",
"8": "Mendoza",
"19": "Misiones",
"20": "Neuqu\u00e9n",
"22": "R\u00edo Negro",
"10": "Salta",
"11": "San Juan",
"12": "San Luis",
"23": "Santa Cruz",
"13": "Santa Fe",
"14": "Santiago del Estero",
"24": "Tierra del Fuego",
"15": "Tucum\u00e1n"
}
如您所见,它按省份名称排序。
定义
时出现问题var list = JSON.parse( result )
以填充选择标记。
但是列表变成了这个:
{1:“CiudadAutónomadeBuenos Aires”,2:“布宜诺斯艾利斯”,3:“Catamara”,4:“Córdoba”,5:“Corrientes”,6:“EntreRíos”,7:“Jujuy “,8:”门多萨“,9:”拉里奥哈“,10:”萨尔塔“......等等......
“list”现在包含按代码排序的数据...是否有办法使用与从ajax调用接收的信息完全一致地填充select标记?
答案 0 :(得分:1)
当迭代表示整数的对象属性时,它们将按数字顺序返回。这个迭代顺序并不总是被定义,但是因为ES6已经被定义了。
如果要维护某个顺序,则需要将信息存储在数组中,而不是存储在普通对象中。
这是将您的对象转换为数组的ES6代码,并按城市名称排序,但如果您的服务器以这种方式返回它会更好:
var arr = Object.keys(obj)
.map ( key => [key, obj[key]] )
.sort ( (a, b) => a[1].localeCompare(b[1]) );
看到它在此代码段中运行:
var json = `{
"2": "Buenos Aires",
"3": "Catamara",
"16": "Chaco",
"17": "Chubut",
"1": "Ciudad Aut\u00f3noma de Buenos Aires",
"4": "C\u00f3rdoba",
"5": "Corrientes",
"6": "Entre R\u00edos",
"18": "Formosa",
"7": "Jujuy",
"21": "La Pampa",
"9": "La Rioja",
"8": "Mendoza",
"19": "Misiones",
"20": "Neuqu\u00e9n",
"22": "R\u00edo Negro",
"10": "Salta",
"11": "San Juan",
"12": "San Luis",
"23": "Santa Cruz",
"13": "Santa Fe",
"14": "Santiago del Estero",
"24": "Tierra del Fuego",
"15": "Tucum\u00e1n"
}`;
var obj = JSON.parse(json);
var arr = Object.keys(obj)
.map ( key => [key, obj[key]] )
.sort ( (a, b) => a[1].localeCompare(b[1]) );
console.log(JSON.stringify(arr, null, 2));