如何用javascript中的字符和数字以某种方式对数组进行排序
How can i sort an array a certain way with characters and numbers in javascript?
我想像这样对数组进行排序:
["AAAA1", "AAAA3", "ABAA2", "AAAA10", "AAAA100", "BBB2", "BBB10", "BBAA3", "BBB2AA"]
当我对它进行排序时,会像这样返回:
["AAAA1", "AAAA10", "AAAA100", "AAAA3", "ABAA2", "BBAA3", "BBB10", "BBB2", "BBB2AA"]
我喜欢这样排序:
["AAAA1", "AAAA3", "AAAA10", "AAAA100", "ABAA2", "BBAA3", "BBB2", "BBB2AA", "BBB10"]
所以我在stackoverflow中搜索了一下,发现了一些类似underlinks的东西,但所有这些都没有对字符进行排序的通用方法&数字字符串,只适用于特殊问题!!
javascript:用整数和字符以某种方式对数组进行排序
如何在javascript排序方法中对数字进行排序
如何正确排序整数数组
第1版:
请在包含数字的排序JavaScript字符串数组中检查问题的答案,答案与格式为var regex = /Value's([0-9]+)/;
的文本一起使用,或者在排序混合字母/数字数组中,答案仅与字符串开头的一个字符一起使用。。我需要一些方法来处理所有可能包含字符和数字的字符串。。。!!
第2版:
Tanx Felix Kling:
很抱歉,例如,我有错误的数组顺序,所以我喜欢在BBB10之前BBB2AA顺序
我找到了添加前导零的通用方法,我现在写了一个版本,请优化它,或者给我另一个排序选项http://jsfiddle.net/Qd8nd/
根据数字在字符串中的位置,您似乎对数字有不同的处理。如果它们在字符之间,似乎应该按字母顺序进行比较,如果它们出现在末尾,则应该按数字进行比较。如果我错了,请纠正我,否则我无法解释为什么BBB10
在BBB2AA
之前。
这类问题没有"通用方法"。您必须自己实现比较这些值的逻辑。也就是说,你必须将每个值分成字符串和数字部分,并分别比较这些部分:
function parseValue(v) {
// extract number (defaults to 0 if not present)
var n = +(v.match(/'d+$/) || [0])[0];
var str = v.replace(n, ''); // extract string part
return [str, n];
}
您可以在.sort
回调中使用该函数:
arr.sort(function(a, b) {
a = parseValue(a);
b = parseValue(b);
// compare string part alphabetically
var result = a[0].localeCompare(b[0]);
// if the string part is the same, compare the number part
return result === 0 ? a[1] - b[1] : result;
});
相关文章:
- 将大数组(字符串和类型数组的混合物)存储到blob或文件中/从blob或文件检索大数组的最佳方式
- 如何以最有效的方式实现这个多维数组
- 从数组中随机抽取的最佳方式
- 以不同的方式对相同的可观察数组进行排序
- 在保持元素一致性的同时旋转数组元素的最佳方式'id
- waht是将数组从jqueryajax调用传递到servlet的最佳方式
- 连接与数组对象相关的文本:方式和位置
- 对对象数组进行分组和排序的最佳方式
- Javascript:以编程方式对对象数组进行排序
- 为什么我的数组没有按照将对象推入数组的方式排序
- 如何查找数组中所有出现的元素的索引(Ramda.js方式)
- 哪种方式在Javascript,字符串连接或数组中更好
- JavaScript 中通过公共属性“交叉”两个 JSON 对象数组的最佳方式
- 如何以有效的方式按给定数组对节点列表进行排序
- 以最有效的方式剪切和粘贴数组元素
- 有没有一种优雅的方式来连接数组数组
- Javascript快捷方式,将字符串附加到数组的所有值中
- 如何以不同的方式合并javascript中的数组
- 变量、数组和 for 循环的行为方式不尽如人意
- 用户取消选择,然后从数组中删除项目并进行排列,具体取决于它们的选择方式