【问题标题】:Javascript: arrays, object, sorting and prototypes?Javascript:数组、对象、排序和原型?
【发布时间】:2011-07-07 17:49:48
【问题描述】:

我制作了一个对象数组,并且能够按对象的一个​​属性进行排序(见底部代码)。但是我硬编码了要排序的属性(在本例中为“名称”)。我如何能够将要排序的属性传递给排序方法?我试过 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);

    });

});

【问题讨论】:

    标签: javascript arrays sorting prototype-programming


    【解决方案1】:

    简单的例子,这样的事情应该可以工作。 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() { ...

    【讨论】:

    • 谢谢罗伯特,这完全符合我的需要。我不打算搞乱数组方法,我想我这样做然后打破整个互联网然后每个人都生我的气......:D
    【解决方案2】:

    您可以编写a[someString] 来获取someString 变量中命名的属性。

    【讨论】:

      【解决方案3】:

      您的排序似乎在这里工作正常:

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

      【讨论】:

      • "我怎样才能将我要排序的属性传递给排序方法?"
      • @mellammokb -- 我不知道你为什么引用这个
      • 嗯..因为这就是OP想要做的??您刚刚将 OP 的代码复制到 jsfiddle 并发布了答案。 OP 已经知道代码有效。
      猜你喜欢
      • 2018-01-28
      • 2012-12-10
      • 1970-01-01
      • 1970-01-01
      • 2021-10-27
      • 2021-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多