首页 > 解决方案 > 将无限数量的参数传递给 sort() 函数

问题描述

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

例如:

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);

完美运行!但是,data内容和字段数量可以更改,以及数据需要排序的字段和字段数量。所以我需要的是能够以这种方式指定函数:

data.sort(arrangeOrder(1,3,6,9,2));

我找到了添加 ONE 参数的方法:

function propComparator(prop) {
  return function(a,b){
    return a[prop] - b[prop];
  }
}
data.sort(propComparator(prop));

以及使用井arguments对象处理函数的未定义参数数量的方法:

function foo() {
  for (var i = 0; i < arguments.length; i++) {
    console.log(arguments[i]);
  }
}

但我似乎无法将这项工作结合起来。这应该是可能的,但我想我只是缺乏技能。

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

标签: javascriptarrayssorting

解决方案


使用一个简单的for循环:

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;
  }
}

推荐阅读