2009-12-22 99 views
2

如何对此数组进行排序?如何在JavaScript中对此数组进行排序?

[ 
    {id : 1, start : 60, end : 120}, 
    {id : 2, start : 100, end : 240}, 
    {id : 3, start : 700, end : 720} 
] 

UPDATE: 所以,如果我的数组看起来像这样,我可以排序它的基础上开始的价值?

[{ 
    1:{start : 60, end : 120}, 
    2:{start : 100, end : 240}, 
    3:{start : 700, end : 720} 
}] 
+5

按什么排序? .. – 2009-12-22 20:03:18

回答

17

你在那里有一个对象数组。您必须指定如何对其进行分类。

无论如何,你可以使用sort方法:

[ 
     {id : 1, start : 60, end : 120}, 
     {id : 2, start : 100, end : 240}, 
     {id : 3, start : 700, end : 720} 
    ] 

A.sort(function(a, b){ 
    return a.start-b.start || a.end-b.end || a.id-b.id; 
}); 
+11

你甚至不需要命名比较函数。如果您不需要在其他地方进行比较,则可以将其用作匿名函数。 data.sort(function(a,b){return a.id -b.id;}; – selfawaresoup 2009-12-22 20:06:30

+2

是的,但是我总是尽量避免使用匿名函数,因为它们让代码更难读取 - 程序员花更多的时间阅读代码比写它:) – Seb 2009-12-22 20:20:41

+0

+1 Seb + 1 Techpriester。 – 2009-12-22 20:22:48

1

你可能想办法,可能 具有相同的初始值对象进行排序一个伪阵列对象。但是,您可以将该对象转换为真实数组,然后对其进行排序,然后再转换回来:

var originalArray = [{ 
    1:{start : 60, end : 120}, 
    2:{start : 700, end : 720}, 
    3:{start : 100, end : 240} 
}]; 
var pseudoArray = originalArray[0]; 
var arrayToSort = []; 
for (var key in pseudoArray) { 
    arrayToSort.push(pseudoArray[key]); 
} 
arrayToSort.sort(function(left, right) { 
    return left.start - right.start || left.end - right.end; 
}); 
var resultPseudoArray = {}; 
for (var i = 0; i < arrayToSort.length; i++) { 
    resultPseudoArray[i + 1] = arrayToSort[i]; 
} 
var resultArray = [resultPseudoArray]; 
0

其实现在你从数组:

var data = [{id : 1, start : 60, end : 120}, {id : 2, start : 100, end : 240},{id : 3, start : 700, end : 720}]; 

function sortByStart(a, b){ 
    return a.start - b.start; 
} 

data.sort(sortByStart);