JavaScript 的array.sort https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#Syntax方法采用可选的比较函数作为参数,该函数采用两个参数并决定其中一个小于另一个。
但是,有时使用自定义排序顺序会更方便按键功能,这是一个函数,需要onevalue 作为参数并为其分配一个sort key。例如:
function keyFunc(value){
return Math.abs(value);
}
myArr = [1, 3, -2];
myArr.sort(keyFunc);
// the result should be [1, -2, 3]
JavaScript 是否支持此功能,或者是否没有办法编写完整的比较函数?
没有支持exactly你所描述的,但编写一个标准是相当微不足道的.sort
用最少的代码实现相同的功能 - 只需返回不同之处通话之间keyFunc
关于两个论点sort
:
function keyFunc(value){
// complicated custom logic here, if desired
return Math.abs(value);
}
myArr = [1, 3, -2];
myArr.sort((a, b) => keyFunc(a) - keyFunc(b));
console.log(myArr);
// the result should be [1, -2, 3]
如果关键函数很复杂并且您不想运行它超过必要的次数,那么为每个输入创建一个查找表将非常简单,如果满足以下条件,则访问查找表:keyFunc
之前已经用该值调用过:
const keyValues = new Map();
function keyFunc(value){
const previous = keyValues.get(value);
if (previous !== undefined) return previous
console.log('running expensive operations for ' + value);
// complicated custom logic here, if desired
const result = Math.abs(value);
keyValues.set(value, result);
return result;
}
myArr = [1, 3, -2];
myArr.sort((a, b) => keyFunc(a) - keyFunc(b));
console.log(myArr);
// the result should be [1, -2, 3]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)