如何按数组值对javascript对象进行排序

如何按数组值对javascript对象进行排序,javascript,arrays,object,Javascript,Arrays,Object,我曾经有一个数组,并使用排序函数获得正确的顺序,如: 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]);

我曾经有一个数组,并使用排序函数获得正确的顺序,如:

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转换回原始格式


谢谢

目前,对象属性的迭代由浏览器完成。并非所有浏览器都会对其iterable属性进行排序,因此将此行为假定为默认行为是不安全的

另一个问题可以解释:

如果您想获得类似的结果,您必须依赖非标准的
Object.keys()
方法,对结果数组进行排序,然后使用它访问属性


或者,以另一种更便于移植的方式,您必须创建一个函数来提取数组中对象的所有属性,对该数组进行排序并迭代以提取每个对象属性。

目前,对象属性的迭代留给浏览器。并非所有浏览器都会对其iterable属性进行排序,因此将此行为假定为默认行为是不安全的

另一个问题可以解释:

如果您想获得类似的结果,您必须依赖非标准的
Object.keys()
方法,对结果数组进行排序,然后使用它访问属性


或者,以另一种更方便的方式,您必须创建一个函数来提取数组中对象的所有属性,对该数组进行排序并迭代以提取每个对象属性。

我只需将其转换回原始格式即可。这很简单:

var array = Object.keys(sampleObj).map(function(key) {
  return [Number(key)].concat(sampleObj[key])
})

Object.keys()是一个ECMAScript 5函数,因此这段代码在IE6-8中不起作用,但基本上在其他浏览器中都能起作用。

我只需将其转换回原始格式即可。这很简单:

var array = Object.keys(sampleObj).map(function(key) {
  return [Number(key)].concat(sampleObj[key])
})
key()是一个ECMAScript 5函数,因此该代码在IE6-8中不起作用,但基本上在其他浏览器中都能起作用