我想排序包含空字符串,数字,“无限”,“-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