2016-01-09 102 views
3

所以我有需要分割成一个阵列,例如一个字符串:分割字符串分成n长度的阵列

"1234567890" 

我需要能够分裂它喜欢:

"1234567890".break(2) = ["12345", "67890"] 

和:

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

所以我不希望它它分成相等的部分的阵列,我想将字符串分割成长度的阵列。你觉得我会怎么做呢?

不,它不是这样的:regex - Split large string in n-size chunks in JavaScript

+0

我不wa nt使阵列中的每个字符串为N, – Kitsumi

+0

我希望阵列的总长度为N(按下Enter enter意外:/) – Kitsumi

+0

好的。我明白现在的差异。 –

回答

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; 
} 
+0

当(1)** zero **作为items参数传递时,(2)** array **或** object **作为str参数传递时,代码会中断。 –

+0

@ArmanOzak当你传递错误的参数时,你为什么期望它工作? –

+0

非常感谢!当您传递的数字小于字符串长度时,这会中断。 – Kitsumi

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)); 
+0

字符串字符在您的解决方案中消失。您可以尝试'brk(“1234567890”,7)// [“1”,“2”,“3”,“4”,“5”,“6”,“90”]' –

+0

你是对的;编辑相关行。我不相信它值得投票。 –