javascript基础语法,字符串转数组的问题

javascript基础语法问题:

1234567891011121314151617181920,

优雅的转化为[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]

有办法吗?

阅读 1.3k
2 个回答

优雅不优雅不知道,反正是算出来了。

const s = "1234567891011121314151617181920";
let result = [];
for (let i = 0, length = 1; i < s.length;) {
    const segment = s.slice(i, i + length);
    result.push(segment);
    i += length;
    if (/^9+$/.test(segment)) {
        length++;
    }
}
console.log(result);

不过用正则表达式测试是否全是 9 有点慢,这里可以稍微提一下速,只有第一个字符是 9 的时候才进行检查。性能测出来下面这个要快一倍。

 if (segment[0] === "9" && /^9+$/.test(segment)) { ... }
function transform(str) {
    var ret = [];
    for (var i = 0, temp = ""; i < str.length; ++i) {
        var char = str[i];
        if (isNaN(Number(char))) {
            if (temp.length) temp = "";
            continue;
        } else {
            temp += char;
        }
        var num = Number(temp);
        if (num > (ret[ret.length - 1] || -1)) {
            ret.push(num);
            temp = "";
        }
    }
    return ret;
}
console.log(transform("1a2b3c4d5"));
console.log(transform("110100100010000"));
console.log(transform("1234567891011121314151617181920"));
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏