将字符串分割成长度为n的数组

3

我有一个字符串需要拆分成数组,例如:

"1234567890"

我需要能够像这样拆分它:
"1234567890".break(2) = ["12345", "67890"]

并且:

"1234567890".break(3) = ["123", "456","7890"]

我不希望将其拆分成等长的数组,而是希望将字符串拆分为长度为 n 的数组。你认为我该如何做到这一点?

不,不是像这样做:正则表达式 - 在JavaScript中按n个字符大小拆分大型字符串


我不想让数组中的每个字符串都是N。 - Kitsumi
我希望数组的总长度为N(不小心按下了回车键:/) - Kitsumi
好的,我现在明白了区别。 - Tᴀʀᴇǫ Mᴀʜᴍᴏᴏᴅ
为什么这被标记为重复? - Kitsumi
看看我的答案。它解决了问题。 - Alexander Elgin
显示剩余3条评论
2个回答

2

这正是您所要求的。

function breakString(str, items) {
  var result = str.match(new RegExp('.{1,' + Math.floor(str.length / items) + '}', 'g'));

  while(result.length > items) {
    result[result.length - 2] += result[result.length - 1];
    result.splice(result.length - 1, 1);
  }

  return result;
}

当将(1) 作为items参数传递时,(2) 将 数组对象 作为str参数传递时,代码会中断。 - Arman Ozak
1
@ArmanOzak 你为什么期望传递错误的参数时它能够正常工作? - Michał Perłakowski
非常感谢!当您传递的数字小于字符串长度时,这确实会出现错误。 - Kitsumi
@Gothdo,我认为一个有参数的函数应该首先测试参数。否则就有破坏整个代码的风险。 - Arman Ozak

1
这个函数完成了任务:

var brk = function(s,n){
    if(s.split && typeof n === "number") {
        var l = s.length,
            z = ~~(l/n),
            zx = (z*n<l) ? l-z*(n-1) : z;
            a = [];

        for(var i=0; i<n-1; i++) {
            a[i] = s.slice(i*z,i*z+z);
        }

        a[Math.ceil(n-1)] = s.slice(-zx);

        return a;
    } else {
        return false;
    }
};

你可以用控制台日志进行测试:
console.log(brk("1234567890",3));

在你的解决方案中,字符串字符会消失。你可以尝试例如 brk("1234567890", 7) //["1", "2", "3", "4", "5", "6", "90"] - Alexander Elgin
你是对的,我已经编辑了相关的那一行。虽然我不认为它应该被踩。 - Arman Ozak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接