Javascript:数组、对象、排序和原型(prototype)?

标签 javascript arrays sorting prototype-programming

我创建了一个对象数组,并且能够按对象的一个​​属性进行排序(请参阅底部代码)。但我硬编码了要按哪个属性排序(在本例中为“名称”)。我如何才能将我想要排序的属性传递给排序方法?我尝试了 tmpArray.sort(function(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/

编辑答案

But is is possible for me to modify an existing method, like array.sort? Thanks.

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

关于Javascript:数组、对象、排序和原型(prototype)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6614916/

相关文章:

javascript - 如何防止字符 '\'转义ES6模板字符串?

java - 数组索引超出 JSwing 和 2D 数组的范围

python - 如何有效地将 2d numpy 数组转换为 1d numpy 元组数组?

javascript - ng-repeat 和一个带有 3 个数组的 json

java - 使用 Java 中的字符串单词中的排序字母创建新字符串

javascript - 将 img 置于 li 内居中

javascript - requirejs - 在不同文件中加载具有不同名称的相同模块

python - 用数字对列表进行排序

scala - 为简单案例类定义排序的简单惯用方法

javascript - 在 Adob​​e Air 中使用函数