![](/img/trans.png)
[英]How to convert javascript associative array to json and use later using parseJSON?
[英]$.parseJSON changes associative array order
我收到一个按字母顺序排序的(按值)json 到 AJAX:
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));
});
有没有办法再次按字母顺序对这些选项进行排序?
如果您必须在客户端执行所有操作,则可以转换和排序原始响应
$.getJSON(url).done(models => {
const sorted = Object.entries(models).sort(([k1, v1], [k2, v2]) =>
v1.localeCompare(v2))
model.append(sorted.map(([value, text]) => $('<option>', { value, text })))
})
否则,我建议在源头修复此问题,以返回更全面的数据 model。
例如,假设你有类似的东西
$models = [
0 => '',
23 => 'Granta',
20 => 'Vesta SW Cross',
24 => 'Zetta'
];
Map 这是一个更好的数据结构,例如
$data = [];
foreach ($models as $value => $text) {
$data[] = ['value' => $value, 'text' => $text];
}
header('Content-type: application/json');
echo json_encode($data);
exit;
这将产生一个 JSON 字符串,如
[
{
"value": 0,
"text": ""
},
{
"value": 23,
"text": "Granta"
},
{
"value": 20,
"text": "Vesta SW Cross"
},
{
"value": 24,
"text": "Zetta"
}
]
这是有序的,包含您需要的所有数据
$.getJSON(url).done(models => {
model.append(models.map(props => $('<option>', props)))
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.