我想排序我的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),所以按降序排列,您使用小寫字母,然後使用大寫字母。 –