2012-06-07 230 views
0

我有对象的类似如下的数组:如何按数字升序对对象数组进行排序?

var array = { 
    "112" : { 
      "id": "3", 
      "name": "raj" 
    }, 
    "334" : { 
      "id": "2", 
      "name": "john" 
    }, 
    "222" : { 
      "id": "5", 
      "name": "kelvin" 
    } 
} 

现在我想在id升序排序的数组,然后将其在阵列恢复。我尝试使用sort(),但无法做到这一点。请帮助如何做到这一点,当我显示从数组中的数据它来排序。

+0

看看这个真棒网站:http://www.sorting-algorithms.com/ – Mageek

+0

你的代码有语法错误,请解决它们。 '112 ='应该是'122:',whyle'raj',其他的应该是字符串,除非它们是变量,但我想它们不是。 – MaxArt

+0

这是对象的对象,而不是对象的数组。 – jbabey

回答

0

这不是一个数组,它是一个对象(或者如果它不是语法错误(=应该是:))。它没有订单。

您可以改为使用数组(使当前属性名称为子对象上的键的值)。

或者,您可以使用for循环来构建键名称的数组,然后对其进行排序,并将其作为按顺序访问对象的基础。

0

这是一个对象,但你可以数组排序ILKE这样的:

工作演示:http://jsfiddle.net/BF8LV/2/

希望这有助于,

代码

function sortAscending(data_A, data_B) 
{ 
    return (data_A - data_B); 
} 
var array =[ 9, 10, 21, 46, 19, 11] 
array.sort(sortAscending) 
alert(array);​ 
0

的JavaScript根据定义,对象是无序的。语言规范甚至不保证,如果你连续两次遍历一个对象的属性,它们将在第二次以相同的顺序出现。

如果您需要订购物品,请使用数组和Array.prototype.sort方法。

0

假设你的意思是你的代码对象的数组,即:

var unsortedArray = [ 
    { id: 3, name: "raj" }, 
    { id: 2, name: "john" }, 
    { id: 5, name: "kelvin" } 
]; 

然后你就可以通过ID通过传递函数的Array.Sort(排序)来比较的id:

var sortedArray = unsortedArray.sort(function(a, b) { 
    return a.id - b.id 
}); 

正如其他人指出的,你拥有的是一个包含对象而不是数组的对象。

0

没有多少人知道,Array.sort可以其他类型的对象可以使用,但必须有一个length属性:

array.length = 334; 
Array.prototype.sort.call(array, function(a, b) {return a.id - b.id;}); 

不幸的是,这并不能很好的工作,如果你的“阵列”是充满了像你一样的“洞”。

0
var array = { 
    "112" : { 
     "id": "3", 
     "name": "raj" 
    }, 
    "334" : { 
     "id": "2", 
     "name": "john" 
    }, 
    "222" : { 
     "id": "5", 
     "name": "kelvin" 
    } 
} 
var sortedObject = Array.prototype.sort.apply(array); 

result: 
{ 
    "112": { 
     "id": "3", 
     "name": "raj" 
    }, 
    "222": { 
     "id": "5", 
     "name": "kelvin" 
     }, 
    "334": { 
     "id": "2", 
     "name": "john" 
    } 
}