[英]Split number and alphabets in string
假设我有以下字符串:
"22N"
"3X"
"-12X"
"12T"
"123123T"
现在,我想拆分numbers
和alphabets
以形成成对的数组:
[22, "N"]
[3, "X"]
[-12, "X"]
[12, "T"]
[123123, "T"]
我试过的
var first = parseInt(input.substring(0, input.length - 1));
var last = input.slice(-1);
这行得通,但是有什么更快的方法,因为我必须处理数百万个数据。
注意 : alphabets
是单个字符, 总是最后一个 。
好吧, MDN
接下来讲一元加法
一元加号是将某物转换为数字的最快且首选的方式
如果您相信,可以采取以下方法:
let tests = ["22N", "3X", "-12X", "12T", "123123T"]; const splitNumLetter = (str) => [+str.slice(0, -1), str.slice(-1)]; tests.forEach(s => console.log(splitNumLetter(s)));
.as-console {background-color:black !important; color:lime;} .as-console-wrapper {max-height:100% !important; top:0;}
也许str.charAt(str.length - 1)
比str.slice(-1)
快。 您可以检查以下良好的性能比较: https : //jsperf.com/charat-vs-index/5
这在我脑海中
var str="22N";
str=str.split('');
var last = str.pop();
var last = str.join('');
通过分析字符串的模式,数字和字母始终在左侧或右侧,而永远不会在其他中间。 因此,实现此目标的最快,最干净的方法是使用regex替换。
正则表达式只需要一次,因为遵循这种模式,我提到您可以先提取数字,然后再替换从同一字符串中提取的数字。
假设您将元素包含在数组变量中:
var elements = [
"22N",
"3X",
"-12X",
"12T",
"123123T"
];
然后,您只需要遍历它们中的每一个,无论存在多少元素,都可以在定义最终数组之后使用forEach()
函数:
var splitElements = [];
elements.forEach((string)=>{
let numbers = string.replace(/[a-zA-Z]/g, ''),
letters = string.replace(numbers,'');
splitElements.push([numbers,letters])
});
然后您可以在splitElements
看到结果。 看看它怎么运作:
var elements = [ "22N", "3X", "-12X", "12T", "123123T" ], splitElements = []; elements.forEach((string)=>{ let numbers = string.replace(/[a-zA-Z]/g, ''), letters = string.replace(numbers,''); splitElements.push([numbers,letters]) }); console.log(splitElements);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.