我有一个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>
我按照文本顺序需要这个&#34; -select-,A,B,C&#34;订单,而不是价值。但jquery的$ .each函数按值的顺序附加它。
请帮我介绍如何按文字顺序排序和显示(在mozilla浏览器中工作正常,但不在ie和chrome中)
提前致谢
答案 0 :(得分:2)
如果想保留项目的顺序,我建议使用像
这样的数组/集合[{ "key": "0", "value": "-select-"}, { "key": "10", "value": "A"}, { "key": "5", "value": "B"}, { "key": "14", "value": "C"}]
答案 1 :(得分:0)
对象是无序集。你有两种方法 - 使用对id和value都有引用的排序键或使用数组 - 比如
{ "values": [
{ "bar": "foobar" },
{ "foo": "foobaz" }
] }
您可以使用for (i = 0; i < len; i++)
迭代数组,并拥有原始订单。
有关详细信息,请查看here。
答案 2 :(得分: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 });
答案 3 :(得分: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');
谢谢,
希瓦