gpt4 book ai didi

javascript - 带闭包的对象中键的排序函数 - Javascript

转载 作者:行者123 更新时间:2023-11-29 22:47:11 24 4
gpt4 key购买 nike

我正在为对象中的每个键创建一个单独的函数,如下所示:

对象

let users = [
{ name: "John", age: 20, surname: "Johnson" },
{ name: "Pete", age: 18, surname: "Peterson" },
{ name: "Ann", age: 19, surname: "Hathaway" }
];

简单的排序功能

// Sorting by name (Ann, John, Pete)
users.sort((a, b) => a.name > b.name ? 1 : -1);

// Sorting by age (Pete, Ann, John)
users.sort((a, b) => a.age > b.age ? 1 : -1);

它运行良好,但我需要创建一个带闭包的动态函数,它将像这样调用:

users.sort(byField('name')); 而不是 users.sort((a, b) => a.name > b.name ? 1 : -1 );

到目前为止我试过这个:

function byField(str) {
return (a, b) => a.str > b.str ? 1 : -1;
}

console.table(users.sort(byField('name')));
console.table(users.sort(byField('age')));

但它只返回未排序的对象。

最佳答案

你需要一个 property accessor带有方括号和一个对称工作并遵循相同值的函数。

阅读更多有关仅返回一部分的函数的信息,例如 -11 或仅返回一个 bool 值:Sorting in JavaScript: Shouldn't returning a boolean be enough for a comparison function?

const withKey = key => (a, b) => (a[key] > b[key]) - (a[key] < b[key]);

let users = [{ name: "John", age: 20, surname: "Johnson" }, { name: "Pete", age: 18, surname: "Peterson" }, { name: "Ann", age: 19, surname: "Hathaway" }];

console.log(users.sort(withKey('name')));
console.log(users.sort(withKey('age')));
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 带闭包的对象中键的排序函数 - Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58157644/

24 4 0
文章推荐: android - 检查邻居 Android fragment 的存在
文章推荐: javascript - React Infinite Scroll 超出最大更新深度
文章推荐: javascript - 如何在递归生成的