如果我有一个给定的字符串,使用JavaScript,是否可以根据ASCII码删除其中某些字符并返回剩余的字符串,例如从字符串中删除ASCII码< 22的所有字符?
如果我有一个给定的字符串,使用JavaScript,是否可以根据ASCII码删除其中某些字符并返回剩余的字符串,例如从字符串中删除ASCII码< 22的所有字符?
事实证明,有很多不同的解决方案,以下是一个简短的概述(从最快到最慢排序)
let finalString = "";
for(let i = 0; i < myString.length; i++ ) {
if(myString.charCodeAt(i) < 22) continue;
finalString += myString.charAt(i);
}
速度(针对下面的基准测试):82,600次操作/秒 ±1.81%
const newStringArray = myString.split("").filter(e => e.charCodeAt(0) > 22)
let finalString = ""
for(let i = 0; i < newStringArray.length; i++ ) {
finalString += newStringArray[i]
}
速度 (基准测试结果):55,199个操作/秒 ±0.53%
比原来慢了33.17%
.join
的单行代码const newString = myString.split("").filter(e => e.charCodeAt(0) >= 22).join("");
速度(针对下面的基准测试):18,745次操作/秒 ±0.28%
比原来慢了77.31%
.reduce
的一行代码const newString = myString.split("")
.filter(e => e.charCodeAt(0) > 22)
.reduce( (acc, current) => acc += current, "");
速度(下面基准测试的结果):17,781次操作/秒,误差±0.23%
慢78.47%
基准测试可以在此找到:https://jsbench.me/50k8zwue1p
是的,可以使用JavaScript的str.charCodeAt()
方法实现。
您可以将给定的字符串转换为字符数组,然后使用map方法将每个字符与要比较的ASCII代码进行比较。
这将返回一个遵循条件的新数组,然后您只需连接该数组以再次形成字符串即可。
对于大字符串来说,连接可能比join更快。
因此,在@WolveringDEV的答案基础上,您可以循环遍历数组并进行连接,而不是使用join。
const newStringArray = myString.split("")
.filter(e => e.charCodeAt(0) > 22)
let finalString = ""
for(let i = 0; i < newStringArray.length; i++ ) {
finalString += newStringArray[i]
}
.join
则没有这样的开销 ;) - WolverinDEV
const newString = myString.split("").filter(e => e.charCodeAt(0) > 22).reduce( (acc, current) => acc + current, "");
- n3ko