3

我有一个 json 字符串作为

 json={"0":"-select-","10":"A","5":"B","14":"C"};

从 php 代码返回,按文本 A、B、C 排序

我将此json字符串绑定到jquery中的选择框

$.each(json,function(k,v){
    $('#UserCityRes').append('<option value="'+k+'">'+v+'</option>');
});

但它按值顺序给出选择列表

<select name="citylist" id="UserCityRes">
 <option value="0">select</option>
 <option value="5">B</option>
 <option value="10">A</option>
 <option value="14">C</option>
</select>

我需要这个按文本顺序作为“-select-,A,B,C”顺序,而不是值。但是 jquery 的 $.each 函数按值顺序附加它。

请帮助我如何按文本顺序对其进行排序和显示(它在 mozilla 浏览器中工作正常,但在 ie 和 chrome 中却不行)

提前致谢

4

4 回答 4

2

如果想保留项目的顺序,我建议使用数组/集合之类

[{ "key": "0", "value": "-select-"}, { "key": "10", "value": "A"}, { "key": "5", "value": "B"}, { "key": "14", "value": "C"}]
于 2013-05-14T09:27:45.373 回答
0

对象是无序集。您有两种方法-使用对 id 和 value 进行引用的排序键或使用数组-类似于

{ "values": [
   { "bar": "foobar" },
   { "foo": "foobaz" }
] }

您可以使用 a 遍历数组for (i = 0; i < len; i++)并获得原始顺序。

欲了解更多信息,请查看此处

于 2013-05-14T08:48:47.843 回答
0

对象中的属性没有特定的顺序。将其转换为对象数组,然后您可以对其进行排序,因为数组在排序后会保留顺序:

var items = $.map(json, function(v, k){ return { value: k, text: v }; });
items.sort(function(x,y){ return x.text < y.text ? -1 : 1 });
于 2013-05-14T08:48:49.130 回答
0

你能参考下面的代码吗?

var values = [];
for(var i in json.message) {
   values.push({ key: i, value: json.message[i] });
}
values.sort(function(a, b) { return a.value.localeCompare(b.value); });
var str = values.map(function (kvp) { return kvp.value; }).join('\n');

谢谢,

湿婆

于 2013-05-14T08:49:33.810 回答