我曾经有一个数组数组,并使用sort函数来获得正确的顺序,如:
var sampleArr = [
[272, 'Some Title', 1, 1],
[281, 'Some Other Title', 1, 2],
[287, 'Another Title', 2, 1]
];
sampleArr.sort(sortCourses);
function sortCourses(a, b){
if (a[3] == b[3]) {
return (a[2] - b[2]);
} else {
return (a[3] - b[3]);
}
}
这是期望的结果,但是我们已经将id更改为属性,并将属性的值更改为数组:
var sampleObj = {
272: ['Some Title', 1, 1],
281: ['Some Other Title', 1, 2],
287: ['Some Other Title 2', 2, 1]
};
通过查找该ID,我们的生活变得更轻松,但我不确定如何对其进行排序。
任何人都可以了解实现这一目标的最佳方法吗?我是否需要将其转换回带有函数的数组,然后运行相同的排序函数?如果是这样,我如何将sampleObj转换回原始格式?
感谢。
答案 0 :(得分:3)
目前,对象属性的迭代留给了浏览器。并非所有浏览器都对其可迭代属性进行排序,因此将此行为视为默认值并不安全。
这个问题可以解释一下:Elements order in a "for (… in …)" loop
如果你想获得类似的东西,你将不得不依赖非标准的Object.keys()
方法,对得到的数组进行排序,然后使用它来访问属性。
或者,以另一种更便携的方式,你必须创建一个函数来提取数组中所有对象的属性,对该数组进行排序并迭代它以提取每个对象属性。
答案 1 :(得分:1)
我只是将其转换回原始格式。这很简单:
var array = Object.keys(sampleObj).map(function(key) {
return [Number(key)].concat(sampleObj[key])
})
Object.keys()是一个ECMAScript 5函数,因此这段代码在IE6-8中不起作用,但基本上每隔一个浏览器都会有效。