gpt4 book ai didi

javascript - 是否可以减少 JavaScript 中排序辅助函数的代码行数?

转载 作者:行者123 更新时间:2023-11-30 09:37:46 25 4
gpt4 key购买 nike

我正在构建一个需要排序/过滤功能的功能。使用辅助函数来定义您自己的排序和过滤方式很简单。假设一个 GitHub 案例(并且假设下面的代码都是可运行的)

compareRepoByModifiedTimeAscending (a, b) {
return a.timestamp > b.timestamp ? 1 : 0
}

compareRepoByModifiedTimeDesending (a, b) {
return a.timestamp > b.timestamp ? 0 : 1
}

compareRepoByOwnerNameAscending (a, b) {
return a.ownerName > b.ownerName ? 1 : 0
}

compareRepoByOwnerNameDesending (a, b) {
return a.ownerName > b.ownerName ? 0 : 1
}

....

我发现有很多(也许太多)像这样的简单辅助函数,实际上,它们的结构非常相似。除了使用 switch 之外,是否有可能找到一种方法来缩小代码库?

顺便说一句,如果您认为可以使它更通用,欢迎您编辑我的问题描述和标题。

最佳答案

您可以使用 currying function它将绑定(bind)要排序的键排序顺序并返回一个通用的排序函数。

function sortByString(key, asc) {
asc = asc ? 1 : -1;
return function(a, b) {
return a[key] > b[key] ? -1 * asc : a[key] < b[key]: 1 * asc: 0
}
}

示例:

function sortByString(key, asc) {
asc = asc ? 1 : -1;
return function(a, b) {
return a[key] > b[key] ? -1 * asc : a[key] < b[key] ? 1 * asc : 0
}
}

var obj = [];

// Create a dummy list of objects
for (var i = 0; i < 10; i++) {
obj.push({
timestamp: Date.now(),
i: i * Math.floor(Math.random() * 10)
})
}
console.log(obj)
obj.sort(sortByString("i", 1))
console.log(obj)
obj.sort(sortByString("i", 0))
console.log(obj)

关于javascript - 是否可以减少 JavaScript 中排序辅助函数的代码行数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42643609/

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