2011-07-07 111 views
2

我做了一个对象数组,并能够通过对象的属性之一进行排序(请参阅底部代码)。但我硬编码哪个属性来排序(在这种情况下“名称”)。我将如何能够传递给排序方法属性,我期待排序?我试图tmpArray.sort(功能(A,B,sortBy),但有一个没有汤给你答复。我知道我可以用Javascript:数组,对象,排序和原型?

array.prototype.thing = function(){ alert("hello world"); } 

修改数组对象,但是可以让我修改现有的方法?一样的Array.sort感谢

$(document).ready(function(){ 

    $(".sort").click(function() { 

    var tmpArray = new Array; 

    for (i=0; i<5; i++) { 

     var tmpObject = new Object; 
     switch(i) { 

      case 0 : 
       tmpObject.name = "Amy"; 
       tmpObject.rank = 1; 
       tmpObject.priority = 3; 
       tmpObject.item = "Blue Item"; 
       break; 

      case 1 : 
       tmpObject.name = "Jen"; 
       tmpObject.rank = 2; 
       tmpObject.priority = 0; 
       tmpObject.item = "Red Item"; 
       break; 

      case 2 : 
       tmpObject.name = "Mike"; 
       tmpObject.rank = 3; 
       tmpObject.priority = 2; 
       tmpObject.item = "Green Item"; 
       break; 

      case 3 : 
       tmpObject.name = "Raul"; 
       tmpObject.rank = 4; 
       tmpObject.priority = 2; 
       tmpObject.item = "Yellow Item"; 
       break;      

          case 4 : 
       tmpObject.name = "Lola"; 
       tmpObject.rank = 5; 
       tmpObject.priority = 1; 
       tmpObject.item = "Blue Item"; 
       break;      

     } 

     tmpArray.push(tmpObject); 
    } 

    tmpArray.sort(function(a, b) { 
      var nameA=a.name.toLowerCase(), nameB=b.name.toLowerCase() 

     if (nameA < nameB) //sort string ascending 
      return -1 
     if (nameA > nameB) 
      return 1 

     return 0 //default return value (no sorting) 
     }); 

     console.log(tmpArray); 

    }); 

}); 

回答

3

快速示例,类似这样的应该工作。 arr是要排序的数组,key是要使用的对象键。请注意,这只是一级深度排序。

var arr = [ 
    {"one" : Math.random(), "two" : Math.random(), "id" : "First"}, 
    {"one" : Math.random(), "two" : Math.random(), "id" : "Second"}, 
    {"one" : Math.random(), "two" : Math.random(), "id" : "Third"} 
]; 

var oSort = function (arr, key) { 
    arr.sort(function(a, b) { 
     a = a[key], b = b[key]; 
     return a > b ? 1 : a < b ? -1 : 0; 
    }); 
}; 

oSort(arr, 'two'); 

http://jsfiddle.net/XwswP/

编辑回答

不过是可以让我修改现有的方法,像中的Array.sort?谢谢。

是的,这是可能的,但不这样做。如果你想覆盖它,你可以做
Array.prototype.sort = function() { ...

+0

+1击败我! – mellamokb

+0

谢谢罗伯特,那正是我所需要的。我不打算搞乱数组方法,我想我会这样做,然后打破整个互联网,然后每个人都生我的气......:D – PruitIgoe

-1

你的排序似乎在这里工作的罚款:

http://jsfiddle.net/maniator/2nFYN/

+0

“我将如何能够传递给排序方法属性,我期待排序?” – mellamokb

+0

@mellammokb - 我不知道你为什么要引用那个 – Neal

+0

嗯..因为这就是OP想要做的?您只是将OP的代码复制到jsfiddle并发布了答案。 OP已经知道代码的作用。 – mellamokb

1

你可以写a[someString]获取属性名称d在someString变量中。