编辑2
检查小提琴 - http://jsfiddle.net/SN5zT/2/
以下是小提琴,我不知道为什么我在下拉列表中未定义。
我的小提琴 - http://jsfiddle.net/z6GDj/
var res = '{"allSportPosition":{"25":"Forwards (Strickers)","27":"Fullbacks (Defenders)","28":"Goalkeeper ","26":"Midfielders"}}';
try {
var sportPositionOptions = '';
var parsedJson = JSON.parse(res);
var allSportPosition = parsedJson.allSportPosition;
var values = new Array();
$.each(allSportPosition, function (index, value) {
values[index] = value;
});
//alert(values.length);
values.sort();
$.each(values, function (atIndex, atValue) {
sportPositionOptions = sportPositionOptions + '<option value="' + atIndex + '">' + atValue + '</option>';
});
$(sportPositionOptions).appendTo("#player");
} catch (e) {
alert("Parsing error:" + e);
}
$.each
自动将密钥排序为res
的25,26,27,28。
请解释这个的原因以及为什么我未定义?
让我知道如果我需要更多解释,我一定会这样做:)
修改
请解释自动排序的原因http://jsfiddle.net/SN5zT/
答案 0 :(得分:0)
答案 1 :(得分:0)
$.each
正在执行以下任务,这就是为什么你会得到这么多未定义的
values[25] = "Forwards (Strickers)"
values[26] = "Midfielders"
values[27] = "Fullbacks (Defenders)"
values[28] = "Goalkeeper"
在$.each
浏览器期间,如果密钥是整数,则会自动对密钥进行排序,避免这种情况的一种方法是使用非整数密钥
答案 2 :(得分:0)
由于您将对象传递给each(),因此jquery将键作为索引参数传递。在您的对象中,键的范围为25到28.使用空数组上的值[25]设置数组会将数组扩展为索引25,前25个元素未定义。使用values.push(value)会将值附加到数组的末尾。
答案 3 :(得分:0)
以下脚本正在运行,我也想出了“undefineds”的来源。
var res = '{"allSportPosition":{"25":"Forwards (Strickers)","27":"Fullbacks (Defenders)","28":"Goalkeeper ","26":"Midfielders"}}';
try{
var sportPositionOptions = '';
var parsedJson = JSON.parse(res);
var allSportPosition = parsedJson.allSportPosition;
var values = allSportPosition;
//$.each(allSportPosition, function(index, value) {
// values[index] = value;
//});
//alert(values.length);
$.each(values,function(atIndex, atValue){
sportPositionOptions = sportPositionOptions+'<option value="'+atIndex+'">'+atValue+'</option>';
});
$(sportPositionOptions).appendTo("#player");
}
catch(e){
alert("Parsing error:"+ e);
}
数组自动排序,因为键设置正确。 见http://www.w3schools.com/js/js_obj_array.asp。 “阵列可以容纳 单个名称下的许多值,您可以通过访问值 指索引号。“
或者:更改索引,然后更改订单。 (索引表示订单)。
未定义的值是由javascript默认创建的,请在此处查看最后一个答案(How to append something to an array?)
“另请注意,您无需按顺序添加,实际上也可以 跳过值,如
myArray [myArray.length + 1000] = someValue;
在这种情况下,两者之间的值将具有未定义的值。“
答案 4 :(得分:0)
您需要做的是在排序之前定义选项,然后将它们附加到您的选择中:
var res = '{"allSportPosition":{"25":"Forwards (Strickers)","27":"Fullbacks (Defenders)","28":"Goalkeeper ","26":"Midfielders"}}';
try {
var sportPositionOptions = '',
parsedJson = JSON.parse(res),
allSportPosition = parsedJson.allSportPosition,
options = new Array();
$.each(allSportPosition, function (index, value) {
options[index] = $('<option></option>', {
value: index,
text: value
});
});
$.each(options, function (index) {
$('#player').append(options[index]);
});
} catch (e) {
alert("Parsing error:" + e);
}
jsfiddle:http://jsfiddle.net/z6GDj/11/