Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.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_Jquery - Fatal编程技术网

自定义JavaScript数组的排序功能

自定义JavaScript数组的排序功能,javascript,jquery,Javascript,Jquery,我有一个非常简单的排序方法: sortByNumericAttr : function (a, b,attr){ a = a[attr]; b = b[attr]; return ((a < b) ? -1 : ((a > b) ? 1 : 0)); } 基于此函数,如何实现此效果或类似效果?您可以使用另一个函数创建一个函数: function sort_by(attr) { return functi

我有一个非常简单的排序方法:

sortByNumericAttr : function (a, b,attr){            
        a = a[attr];
        b = b[attr];
        return ((a < b) ? -1 : ((a > b) ? 1 : 0));
}

基于此函数,如何实现此效果或类似效果?

您可以使用另一个函数创建一个函数:

function sort_by(attr) {
    return function(o1, o2) {
        var a = o1[attr];
        var b = o2[attr];

        return ((a < b) ? -1 : ((a > b) ? 1 : 0));
    };
}
函数排序依据(attr){
返回功能(o1,o2){
var a=o1[attr];
var b=o2[attr];
回报率((ab)?1:0);
};
}

然后调用它,如
.sort(sort_by('id'))

如果您有这样的列表:

var list = [
    {id:5, color:"Green", name:"Audi"},
    {id:1, color:"Red", name:"Ferrari"},
    {id:3, color:"Silver", name:"Mercedes"}
];
您可以创建排序函数,对每个使用过的键的列表进行排序:

function sortById(a,b) { return (a.id-b.id); }
list.sort(sortById);

function sortByName(a,b) { return (a.name.localeCompare(b.name)); }
list.sort(sortByName);

function sortByColor(a,b) { return (a.color.localeCompare(b.color)); }
list.sort(sortByColor);

这段代码看起来不错……是的,不起作用,javascript排序只接受函数,attr是unfinedjust,作为旁白,“这可能吗?”问题通常不是SO知识体系的有用补充。也没有任何是/否问题。大多数问题甚至可以通过快速咨询(在那里您可以看到方法的正确签名等)来解决。获得正确实现功能的帮助是一件完全不同的事情。@nbrooks-你说得对,谢谢你指出。正如我在问题中提到的,这个想法是为每个属性编写一个通用函数,而不是一个单独的函数。@nbrooks-我明白你的意思了。当然,对于搅拌机+1;)
function sortById(a,b) { return (a.id-b.id); }
list.sort(sortById);

function sortByName(a,b) { return (a.name.localeCompare(b.name)); }
list.sort(sortByName);

function sortByColor(a,b) { return (a.color.localeCompare(b.color)); }
list.sort(sortByColor);