javascript - 将无限数量的参数传递给 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!感谢我能得到的所有帮助!
解决方案
使用一个简单的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;
}
}
推荐阅读
- angular - 使用角度 7 为任意值设置动画
- amazon-ec2 - 如何通过 CLI 使用自定义 AMI 映像创建 ECS 集群?
- python - 模块不可调用
- python - 为什么我得到“试图在数据帧的切片副本上设置一个值”
- linux - 在 192.168.65.1:53 上查找 google.com:无法解组 DNS 消息
- php - 将内容动态插入用户通过 PHP 和 mySQL 生成的 URL
- python - 如何在flask-sqlalchemy中只返回枚举的值而不是kv对
- reactjs - 如何声明 this.someProperty 与 typeScript 反应?
- swift - QLPreviewPanel 不显示图像 Swift OSX
- javascript - Formik + React Form中的下拉列表和值未更新