$ .parseJSON更改关联数组顺序

我通过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" }

然后我填充一个选择元素:

$.each(models,function(key,value) {
    model.append($('<option></option>').text(value).val(key));
});

有什么办法可以再次按值的字母顺序对这些选项进行排序?

qq820066128 回答:$ .parseJSON更改关联数组顺序

如果您必须在客户端进行所有操作,则可以对原始回复进行转换和排序

$.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 })))
})

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

例如,假设您有类似的东西

$models = [
    0  => '',23 => 'Granta',20 => 'Vesta SW Cross',24 => 'Zetta'
];

将此映射到更好的数据结构,例如

$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)))
})
本文链接:https://www.f2er.com/3169293.html

大家都在问