Javascript 将无限数量的参数传递给sort()函数

Javascript 将无限数量的参数传递给sort()函数,javascript,arrays,sorting,Javascript,Arrays,Sorting,手头的任务是创建一个函数,该函数接受无限数量的参数来对数组进行排序 例如: var data = [['John','London',35], ['Ricky','Kuala Lumpur',38], ['Ivan','Moscow,29]]; function arrangeOrder(a,b) { //Sort by field [0] if (a[0] > b[0]) return 1; if (a[0] < b[0])

手头的任务是创建一个函数,该函数接受无限数量的参数来对数组进行排序

例如:

var data = [['John','London',35],
            ['Ricky','Kuala Lumpur',38],
            ['Ivan','Moscow,29]];

function arrangeOrder(a,b) {
 //Sort by field [0]
 if (a[0] > b[0]) return 1;
 if (a[0] < b[0]) return -1;

 //Sort by field [1]
 if (a[1] > b[1]) return 1;
 if (a[1] < b[1]) return -1;

 //Sort by field [2]
 if (a[2] > b[2]) return 1;
 if (a[2] < b[2]) return -1;
}

data.sort(arrangeOrder);
我找到了添加一个参数的方法:

function propComparator(prop) {
  return function(a,b){
    return a[prop] - b[prop];
  }
}
data.sort(propComparator(prop));
以及使用well
arguments
object为函数处理无限制数量的参数的方法:

function foo() {
  for (var i = 0; i < arguments.length; i++) {
    console.log(arguments[i]);
  }
}
函数foo(){
for(var i=0;i
但我似乎不能把这两者结合起来。 这应该是可能的,但我想我只是缺乏技巧

注意:不幸的是,ES6解决方案在我的环境中不起作用,所以我需要香草JavaScript!
感谢所有能给我的帮助

循环使用一个简单的

function arrangeOrder(a, b) {
  for (var i = 0; i < a.length; i++) {
    if (a[i] > b[i]) return 1;
    if (a[i] < b[i]) return -1;
  }
}
函数排列顺序(a、b){
对于(变量i=0;ib[i])返回1;
如果(a[i]
如果要指定作为参数传入的索引的顺序,可以创建一个函数来读取这些参数并返回一个新函数,该函数可以传递给
sort()

var数据=[['Betty','London',35],
['Xavier','吉隆坡',38],
['Alan','Moscow',35];
函数sortFunc(){
设args=arguments
返回函数(a,b){
for(设i=0;ib[args[i]]?1:-1
}
返回0
}
}
//按年龄、姓名、城市排序
设f=sortFunc(2,0,1)
数据排序(f)
console.log(数据)
//按年龄、城市、姓名排序
f=排序函数(2,1,0)
数据排序(f)
console.log(数据)
//也适用于对象:
风险值数据=[
{姓名:“马克”,年龄:25岁,家庭:“安克雷奇”},
{姓名:“马克”,年龄:15岁,家庭:“纽约”},
{姓名:“约翰”,年龄:25岁,家:“亚琛”},
{姓名:“爱丽丝”,年龄:15岁,家庭:“波士顿”}
];
f=sortFunc(“年龄”、“家庭”、“姓名”)
数据排序(f)
console.log(数据)
您已经回答了自己的问题[我找到了添加一个参数的方法]

ES6是普通的JavaScript——你指的是ES5。
function arrangeOrder(a, b) {
  for (var i = 0; i < a.length; i++) {
    if (a[i] > b[i]) return 1;
    if (a[i] < b[i]) return -1;
  }
}
var data =  [['John','London',35],
            ['Ricky','Kuala Lumpur',38],
            ['Ivan','Moscow',29]];

function propComparator(prop) {
    return function(a,b){
        for (const x of prop) {
            if ( a.hasOwnProperty(prop[x]) && b.hasOwnProperty(prop[x]) ) {
                if (a[ prop[x] ] === b[ prop[x] ]) continue;
                return a[ prop[x] ] > b[ prop[x] ]?1:-1;
            } else
                continue;
        }
    }
}
var prop = [2, 0, 1, 5, 1000];
data.sort(propComparator(prop));