gpt4 book ai didi

Javascript ES6自定义排序方法并不总是有效

转载 作者:行者123 更新时间:2023-11-28 10:43:59 25 4
gpt4 key购买 nike

我想对 JSON 输出进行排序。

我为其创建了自己的排序方法,如下所示:

const sortAsc = (propertyName) => (a, b) => a[propertyName] === b[propertyName] ? 0 : a[propertyName] < b[propertyName] ? -1 : 1;
const sortDesc = (propertyName) => (a, b) => a[propertyName] === b[propertyName] ? 0 : a[propertyName] < b[propertyName] ? 1 : -1;

我这样调用它:

asc(value) {
this.result.sort(this.sortAsc(value));
}

它可以工作,但是当我对其进行排序时,它并不总是正确排序。

看看这个小 gif: https://gyazo.com/5f590f7c921eb1cb3bc4138f85c2162b

如您所见,它实际上不适用于 ID。它在 Naam(荷兰语名称)上升序运行,但在降序运行时,它首先给出 2 个以 v 和 k 开头的名称。这是为什么?

好吧,如果这是难以解决的问题,那并不是真正的问题。只要它可以对数字和字符串进行排序即可。

还要注意的一点是我使用的是 Angular 4.4.4。我在谷歌上搜索了内置的 sort/orderBy 函数,但发现它不是内置的。但如果我可以使用 Angular 提供的任何东西来使其变得更容易,我会很乐意使用它!

编辑:

我的新方法:

sortAsc = (propertyName) => (a, b) => a[propertyName].localeCompare(b[propertyName]);

最佳答案

您可以使用String#localeCompare带选项:

The localeCompare() method returns a number indicating whether a reference string comes before or after or is the same as the given string in sort order.

The new locales and options arguments let applications specify the language whose sort order should be used and customize the behavior of the function. In older implementations, which ignore the locales and options arguments, the locale and sort order used are entirely implementation dependent.

const sortAsc = propertyName => (a, b) =>
a[propertyName].localeCompare(b[propertyName], undefined, { numeric: true, sensitivity: 'base' });


const sortDesc = (propertyName) => (a, b) =>
-a[propertyName].localeCompare(b[propertyName], undefined, { numeric: true, sensitivity: 'base' });

关于Javascript ES6自定义排序方法并不总是有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46796731/

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