Javascript:数组、对象、排序和原型



我创建了一个对象数组,并能够根据对象的一个属性进行排序(参见底部代码)。但是我硬编码了要排序的属性(在本例中是"name")。我怎样才能把我要排序的属性传递给排序方法呢?我试过tmpArray。sort(函数(a, b, sortBy)),但是得到一个没有汤的响应。我知道我可以用

来修改数组对象
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);
    });
});

快速示例,类似这样的东西应该可以工作。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() { ...

您可以编写a[someString]以获得在someString变量中命名的属性

您的排序似乎在这里工作得很好:

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

最新更新