我有一个JavaScript对象数组,我想通过一个始终为正整数且末尾可以带有一个可选字母的属性进行跨浏览器排序。我正在寻找至少在Firefox 3和Internet Explorer 8中都能工作的解决方案。我找到的最接近这样一个排序函数如下:
var arrayOfObjects = [{id: '1A', name: 'bar', size: 'big'}, {id: '1C', name: 'bar', size: 'small'}, {id: '1', name: 'foo', size: 'big'}, {id: '1F', name: 'bar', size: 'big'}, {id: '1E', name: 'bar', size: 'big'}, {id: '1B', name: 'bar', size: 'small'}, {id: '1D', name: 'bar', size: 'big'}, {id: '1G', name: 'foo', size: 'small'}, {id: '3', name: 'foo', size: 'small'}, {id: '23', name: 'foo', size: 'small'}, {id: '2', name: 'foo', size: 'small'}, {id: '1010', name: 'foo', size: 'small'}, {id: '23C', name: 'foo', size: 'small'}, {id: '15', name: 'foo', size: 'small'}]
arrayOfObjects.sort(function(a, b){
return (a.id < b.id ? -1 : a.id == b.id ? 0 : 1);
});
经过排序后,打印数组对象的结果如下:
1, foo, big
1010, foo, small
15, foo, small
1A, bar, big
1B, bar, small
1C, bar, small
1D, bar, big
1E, bar, big
1F, bar, big
1G, foo, small
2, foo, small
23, foo, small
23C, foo, small
3, foo, small
然而,我希望数组对象按照以下顺序进行打印:
1, foo, big
1A, bar, big
1B, bar, small
1C, bar, small
1D, bar, big
1E, bar, big
1F, bar, big
1G, foo, small
2, foo, small
3, foo, small
15, foo, small
23, foo, small
23C, foo, small
1010, foo, small
在此基础上,我该如何修改上述函数,以便将对象按数字作为主键、按字母作为次要键进行排序?非常感谢您提供的任何帮助。
return a[2] < b[2] ? -1 : 1;
,并且它仍然可以正确排序。 - Cristian Sanchezsort
实现仍然是不稳定的,因此即使两个元素相等,它们的位置在最终状态中仍可能被交换。其他浏览器的排序实现是稳定的。我想还是安全第一比较好。 - Cristian Sanchez