我想排序包含空字符串,數字,「無限」,「-infinity」和「NaN」的數組。我以字符串的形式接收所有值,因此在空字符串,inf和nan時排序不能按預期工作。有沒有一種方法來按升序和降序來自定義我的排序函數?你如何排序與空字符串,NaN,數字和無窮大的數組
回答
編輯:根據您的評論,"" < "-inf" < "Nan" < "inf" < ... < -1 < 0 < 1 < ...
。您可以通過修改order
陣列來更改此設置。
注意如果數組包含order
陣列中不存在的元素,則此代碼將無法正常工作。您可以爲此設置警戒,或將其他特殊元素(如0
)添加到order
陣列。
另請注意NaN
和Infinity
(不是字符串文字)也是javascript中的一個數字。使用此代碼,它們將在數字旁邊訂購。
var basicCompare = function (a, b) {
if (a > b) return 1;
if (a < b) return -1;
return 0;
}
var compare = function (a, b) {
// 0 represents numbers.
var order = ["", "-inf", "Nan", "inf", 0],
orderOfNumber = order.indexOf(0),
orderOfA = typeof(a) === "number" ? orderOfNumber : order.indexOf(a),
orderOfB = typeof(b) === "number" ? orderOfNumber : order.indexOf(b);
if (orderOfA === orderOfNumber & orderOfB === orderOfNumber) {
// They are both numbers, use regular comparison.
return basicCompare(a, b);
}
// They are not both numbers, so use the axiomatic order.
return basicCompare(orderOfA, orderOfB)
}
array.sort(compare);
您可以使用對象作爲排序順序並將給定的項目移動到想要的位置。
var array = ["", 2, 3, 0, "inf", "-inf", "Nan", -1, -100000];
array.sort(function (a, b) {
var order = { "": -4, "-inf": -3, "Nan": -2, "inf": -1 };
return (order[a] || 0) - (order[b] || 0) || a - b;
});
console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }
你喜歡我的版本?感謝您的CSS :)? –
不,數字按0分組,然後按實際增量分組,請參閱編輯'-100000'。 –
@NinaScholz啊,我明白了。你知道是否有時候從比較函數返回'NaN'而不是'0',就像你的'a'和'b'都是'inf'一樣? – Paulpro
- 1. 排序字符串數組與函數
- 2. 如何排序數字字符串和文字字符串數組
- 3. 如何排序包含數字的字符串數組,數字
- 4. 排序Javascript數組與字符串和數字
- 5. 排序字符串數組
- 6. 排序字符串數組
- 7. 排序字符串數組
- 8. 排序字符串數組
- 9. 排序字符串數組
- 10. 如何排序字符串數組
- 11. 排序字符串數組與PHP
- 12. 如何排序數字如「2.1.2.5」的字符串數組?
- 13. 拆分和排序字符串數組
- 14. 合併和排序字符串數組
- 15. 在字符串數組中排序字
- 16. 排序與字符串包含數字
- 17. 排序與c中的字符串數組有關的數組
- 18. 排序包含字符串,日期和數字的數組
- 19. 似乎無法遍歷鍵是數字字符串的已排序字典。你如何排序字典迭代?
- 20. 排序字符串排列數組
- 21. 排序數組與字符串中的日期無比較
- 22. 如何排序與Linq中的數組匹配的字數字符串列表
- 23. 如何在數組中將數字排序爲字符串?
- 24. 與字符串和數組
- 25. 排序字符串數字
- 26. 程序與字符串和數組
- 27. 你如何一個字符串比較字符串數組
- 28. SQL排序數字和字符串
- 29. SQL排序字符串和數字
- 30. 如何排序下面的對象和字符串數組?
什麼是預期的結果?匿名函數沒有'.name';函數如何被調用?爲什麼'String''「inf」'被認爲是'Infinity'或'String''' Nan'''NaN'? – guest271314
爲什麼不擴展你當前的邏輯並根據字符串的值爲'result'賦值? – 2016-11-04 18:39:23
爲什麼不使用像[Infinity]這樣的真實全局變量(https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Infinity),[NaN](https://developer.mozilla.org/) fr/docs/Web/JavaScript/Reference/Objets_globaux/NaN)而不是使用字符串? – soywod