通过字符串最有效的方法是什么;s字符

What is the most efficient way to go through string's chars in Javascript?

本文关键字:是什么 字符 方法 字符串 有效      更新时间:2024-03-09

我看到SO上有类似的问题,但我没有找到一个符合我特定目标的问题。

我开发了一个小函数,它循环通过一个字符串(比如说10到160个字符)来提取

  • 通配符(例如$1、$2…)-称为"特价"
  • 它们之间的字符串

要解析的字符串示例:"word1word2$1word3$2word4$3"。

输出示例:

{
    strings: [word1 word2, word3, word4],
    specialChars: 3
}

当然也有限制情况(没有通配符,只有1个通配符,通配符可以在字符串的开头或结尾)。

到目前为止,我写的算法如下(在这个问题中,有一些问题需要解决,但我对效率比对结果更感兴趣):

function parsestr(str: string) {
    let specialChars = [],
        plaintextParts = [],
        resultObject = {
            strings: [],
            specialChars: 0
        };
    // convert to char array and loop
    str.split('').forEach(function(c, i){
       if (c=='$') specialChars.push(i);
    });
    resultObject.specialChars = specialChars.length;
    // extract plain text parts
    if (specialChars.length == 0) return resultObject;
    // part before first wildcard
    if (specialChars[0]>0) plaintextParts.push(str.substr(0, specialChars[0]-1));
    // 2..N
    for (var i=1; i<specialChars.length-1; i++) {
        plaintextParts.push(str.substr(specialChars[i-1]+2, specialChars[i]-1));
    }
    // last part
    if (specialChars[specialChars.length-1]+1 < str.length-1)
        plaintextParts.push(str.substr(specialChars[specialChars.length-2]+2, specialChars[specialChars.length-1]-1));
    resultObject.strings = plaintextParts;
    return resultObject;
}
// call function and print output
var jsonString = "word1 word2 $1 word3 $2 word4 $3";
console.log(JSON.stringify(parseJsonString(jsonString)));

您只需使用正则表达式:

let str = "word1 word2 $1 word3 $2 word4 $3";
let regex = /'$[0-9]/;
let strSplit = str.split(regex);
console.log(JSON.stringify(strSplit)); // ["word1 word2 ", " word3 ", " word4 ", ""]

如果你不想要最后一个空字符串,你总是可以把它去掉

因此,如果你想要"特殊字符"的数量,你可以取结果strSplit的长度,减去一。

就效率而言,这似乎是一个微观优化,尤其是对于长度不超过160个字符的字符串。使代码以干净、易懂的方式工作比优化每个操作的效率更重要。

在优化代码时,请尝试提高通用解决方案的效率,然后再优化细节。假设这个功能不存在于真空中,那么在优化字符串操作之类的东西之前,试着关注应用程序本身的性能,找出实际的性能瓶颈在哪里。