我想排序包含空字符串,数字,“无限”,“-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. 排序Javascript数组与字符串和数字
- 4. 排序字符串数组
- 5. 排序字符串数组
- 6. 排序字符串数组与PHP
- 7. 如何排序字符串数组
- 8. 在字符串数组中排序字
- 9. 排序与c中的字符串数组有关的数组
- 10. 排序字符串排列数组
- 11. 排序数组与字符串中的日期无比较
- 12. 似乎无法遍历键是数字字符串的已排序字典。你如何排序字典迭代?
- 13. 如何在数组中将数字排序为字符串?
- 14. SQL排序数字和字符串
- 15. 排序与字符串的数组和浮法
- 16. 如何排序下面的对象和字符串数组?
- 17. 排序与具有数字和字符
- 18. SQL Oracle排序字符串(数字)和(带数字的字母)
- 19. 按字符串的部分排序字符串数组
- 20. 根据字符串中的数字排序数组中的字符串
- 21. 插入与对象,字符串和数组列表排序
- 22. 如何声明不包含无穷和NaN的数字的流类型?
- 23. 在Haskell中,你如何排序无限的字符串列表?
- 24. 如何按字母排序字符串数组?
- 25. 对字符串数组进行排序
- 26. Objective C - 排序字符串数组
- 27. 排序从字符串数组z-A
- 28. 排序两个因字符串数组
- 29. PHP:由字符串键数组排序
- 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