我正在尝试设置我的页面,以便用户能够输入类似“25a89ss15s9 8 63”的字符串,并提醒用户“25,89,15,9,8,63”然后进一步提醒用户“8,9,15,25,63,89”。所以我试图将整数与指定的字符串分开,然后对它们进行排序。 关于如何将它们分成数组或关闭的任何想法?我尝试过类似问题的几个例子,但它们似乎只能用一个整数。
任何帮助都将不胜感激,谢谢。
答案 0 :(得分:8)
var string = "25a89ss15s9 8 63"; // Input
var list = string.match(/\d+/g); // Get a list of all integers
list.sort(function(x,y){ // Sort list
return x - y;
});
// At this point, you have a sorted list of all integers in a string.
此代码使用RegEx(\d+
表示:所有连续数字=整数,/g
表示:选择所有出现次数)。 String.match()
方法返回所有匹配短语的数组,在这种情况下为整数。
最后,调用Array.sort
方法,将函数作为参数传递,对数组进行排序。
答案 1 :(得分:2)
您可以使用正则表达式解析所有数字:
/\d+/g
(一个或多个数字,而g
表示“所有出现的数字”)
然后你可以对它们进行排序,但要确保你使用自定义函数来避免词典排序(这是默认的):
var numbers = "25a89ss15s9 8 63".match(/\d+/g).sort(function(a, b) {return a - b});
您可以这样发出警告:
alert("The numbers are: " + numbers.join(", "));
答案 2 :(得分:2)
试试这个:
var s = "25a89ss15s9 8 63";
var xs = s.match(/\d+/g); // => ["25", "89", "15", "9", "8", "63"]
xs.sort(function(x,y) { return x - y; });
xs.join(", "); // => "8, 9, 15, 25, 63, 89"
答案 3 :(得分:2)
为了得到一个实际的数字数组,我会这样做:
var str = "25a89ss15s9 8 63",
arr = str.match(/\d+/g)
.map(Number)
.sort(function(a,b){ return a-b; });
您需要.map()
available from MDN的兼容性补丁。
请注意,这假设没有小数点。
答案 4 :(得分:1)
以下是线性搜索版本:
var isNumber = false;
var number = "";
var string = "25a89ss15s9 8 63";
var numbers = [];
for (var i = 0; i <= string.length; ++i) {
var c = string.charAt(i);
if (c > '/' && c < ':') {
number += c;
isNumber = true;
} else {
isNumber = false;
}
if (!isNumber) {
if (number != "") {
numbers.push(number);
}
number = "";
}
}
// Non sorted array
alert(numbers);
// Sorted Array
alert(numbers.sort(function(x, y) {
return x - y;
}));