Jquery $.parseJSON更改关联数组顺序

Jquery $.parseJSON更改关联数组顺序,jquery,arrays,json,sorting,parsing,Jquery,Arrays,Json,Sorting,Parsing,我通过AJAX接收到一个按字母顺序排序(按值)的json: console.log(data); 这表明: {"0":"","23":"Granta","20":"Vesta SW Cross","24":"Zetta"} 但当我解析它时: var models = $.parseJSON(data); console.log(models); 它打破了字母顺序并显示: Object { 0: "", 20: "Vesta SW Cross", 23: "Granta", 24: "Zet

我通过AJAX接收到一个按字母顺序排序(按值)的json:

console.log(data);
这表明:

{"0":"","23":"Granta","20":"Vesta SW Cross","24":"Zetta"}
但当我解析它时:

var models = $.parseJSON(data);
console.log(models);
它打破了字母顺序并显示:

Object { 0: "", 20: "Vesta SW Cross", 23: "Granta", 24: "Zetta" }
然后我填充一个select元素:

$.each(models, function(key, value) {
    model.append($('<option></option>').text(value).val(key));
});
$。每个(型号、功能(键、值){
model.append($('').text(value).val(key));
});
有没有办法再次按值按字母顺序对这些选项进行排序?

如果您必须在客户端执行所有操作,您可以转换原始响应并对其进行排序

$.getJSON(url).done(模型=>{
const sorted=Object.entries(models).sort([k1,v1],[k2,v2])=>
v1.localeCompare(v2))
model.append(sorted.map(([value,text])=>$('',{value,text})))
})

否则,我建议在源代码处修复此问题,以返回更全面的数据模型

例如,假设您有

$models=[
0  => '',
23=>“格兰塔”,
20=>“维斯塔西南十字”,
24=>“泽塔”
];
将此映射到更好的数据结构,例如

$data=[];
foreach($value=>$text的模型){
$data[]=['value'=>$value,'text'=>$text];
}
标题('Content-type:application/json');
echo json_编码($data);
出口
这将生成一个JSON字符串,如

[
{
“值”:0,
“文本”:”
},
{
“价值”:23,
“文本”:“格兰塔”
},
{
“价值”:20,
“文本”:“维斯塔西南十字”
},
{
“价值”:24,
“文本”:“泽塔”
}
]
它是有序的,包含您需要的所有数据

$.getJSON(url).done(模型=>{
model.append(models.map(props=>$('',props)))
})

您的数据来自哪里?看起来它来自一个数组,该数组经过排序和筛选,没有重新索引。对后端进行一个小的更改可以为您提供一个具有保证顺序的数组。数据的可能重复项已按正确顺序排序,它是按值排序的。问题是解析的对象没有索引,我需要再次按字母顺序排序。顺序并不重要,我只需要按值按字母顺序排序。你能控制后端代码吗?是PHP吗?如果您回答是,对使用
array\u values()
进行一个小的更改可以在最有意义的地方解决您的问题,例如更改
echo json\u encode($models)
to
echo json_encode(数组_值($models))
否则,请尝试
const options=Object.values(models.sort()