gpt4 book ai didi

javascript - JS 是否支持使用键函数而不是比较器进行排序?

转载 作者:行者123 更新时间:2023-11-29 16:34:36 25 4
gpt4 key购买 nike

JavaScript 的 array.sort方法采用可选的比较函数作为参数,该函数采用两个参数并决定其中一个小于另一个。

但是,有时使用key函数自定义排序顺序会更方便,该函数将一个值作为参数并为其分配一个排序键。例如:

function keyFunc(value){
return Math.abs(value);
}

myArr = [1, 3, -2];
myArr.sort(keyFunc);
// the result should be [1, -2, 3]

JavaScript 是否支持此功能,或者是否没有办法编写完整的比较函数?

最佳答案

不完全支持您所描述的内容,但是编写一个标准的 .sort 函数非常简单,它可以用最少的代码实现相同的功能 - 只需返回对 sort 的两个参数调用 keyFunc 之间的差异:

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]

关于javascript - JS 是否支持使用键函数而不是比较器进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52683537/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com