我想排序我的JSON输出。Javascript ES6自定义排序方法无法一直工作
我为我自己的排序方法,你可以在这里看到:
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'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare)。这也可以让你配置小写/大写单词的排序方式。 –
'v'和'k'可能是区分大小写的东西。在某些数据库中,似乎有类似的问题,其中小写'a'被认为是大写的'Z'。也许尝试在比较函数中使用'.toLower()'? – Tor
它看起来像工作得很好。默认情况下,字符串不等式使用unicode代码点(其中包含ASCII),所以按降序排列,您使用小写字母,然后使用大写字母。 –