Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:数组、对象、排序和原型?_Javascript_Arrays_Sorting_Prototype Programming - Fatal编程技术网

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

Javascript:数组、对象、排序和原型?,javascript,arrays,sorting,prototype-programming,Javascript,Arrays,Sorting,Prototype Programming,我制作了一个对象数组,并能够根据对象的一个属性进行排序(参见底部代码)。但我硬编码了排序依据的属性(在本例中为“名称”)。我如何才能将我希望排序的属性传递给sort方法?我尝试了tmpArray.sort(函数(a,b,sortBy),但得到了一个无汤响应。我知道我可以使用修改数组对象 array.prototype.thing = function(){ alert("hello world"); } 但是我可以修改现有的方法吗,比如array.sort?谢谢 $(document).re

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

    });

});
$(文档).ready(函数(){
$(“.sort”)。单击(函数(){
var tmpArray=新数组;
对于(i=0;i nameB)
返回1
返回0//默认返回值(无排序)
});
控制台日志(tmpArray);
});
});

您的排序在这里似乎运行良好:


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

快速示例,类似的方法应该可以工作
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');
var-arr=[
{“一”:Math.random(),“二”:Math.random(),“id”:“First”},
{“一”:Math.random(),“二”:Math.random(),“id”:“第二”},
{“一”:Math.random(),“二”:Math.random(),“id”:“第三”}
];
var oSort=函数(arr,键){
arr.sort(函数(a,b){
a=a[key],b=b[key];
返回a>b1:a

编辑答案

但我是否可以修改现有的方法,如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);

    });

});
是的,这是可能的,但不要这样做。如果您想覆盖它,您可以这样做

Array.prototype.sort=function()@mellammokb——我不知道你为什么要引用这个……因为这就是OP想要做的??你只是将OP的代码复制到JSFIDLE中并发布了一个答案。OP已经知道代码是有效的。谢谢Robert,这正是我所需要的。我不想弄乱数组方法,我想我这样做了,然后破坏了整个互联网然后每个人都在生我的气