Chrome和IE之间的Javascript数组排序问题

时间:2014-02-03 11:32:23

标签: javascript arrays sorting

我有一个包含大约1000个学生姓名的大型javascript数组。 每个数组元素都以学生ID号作为键,学生将其命名为其值。 它看起来像这样:

student_array['2312'] = 'Bloggs, Joe';
student_array['332'] = 'Carter, John';
student_array['9423'] = 'Davies, David';

等等。

如您所见,数组是按数组值的顺序创建的。然后,我通过迭代数组创建一个选择框,并为每个值创建一个选项,其中数组键是选项值,选项值是数组值。

这是我用于创建选择框的JavaScript:

var student_select = '<select name="student_id" id="student_id">';

for(x in students_array)
{
    student_select += '<option ' + (student_id==x ? 'selected="selected"' : '') + ' value="' + x + '">' + students_array[x] + '</option>';
}

student_select += '</select>';

在Internet Explorer(8)中,此工作正常,选择框显示按值排序的选项。

在Chrome中,它按键排序。这是不可取的,因为它使搜索名称变得不可能。

问题: 如何通过数组值强制执行chrome命令?

1 个答案:

答案 0 :(得分:3)

在for..in语句中迭代元素的顺序是未定义的。 IE碰巧按照添加的顺序返回它们,而Chrome恰好对类似数字的键进行了一些优化,因此它以数字顺序返回它们。

如果订单对您很重要,您应该使用数组(并正确使用它)。

我的建议:

var student_array = [
  { id : 2312, name : 'Bloggs, Joe' },
  { id : 332, name : 'Carter, John' },
  { id : 9423, name : 'Davies, David' }
];


var student_select = '<select name="student_id" id="student_id">';
for (var i=0; i<student_array.length; i++) {
    student_id = student_array[i].id;
    student_name = student_array[i].name;
    student_select += '<option ' + (student_id==x ? 'selected="selected"' : '') + ' value="' + student_id + '">' + student_name  + '</option>';
}

student_select += '</select>';

DEMO:http://jsbin.com/IXaCETEw/1/edit