将字符串分成N个长度的部分

时间:2019-07-03 18:24:04

标签: javascript

我正在尝试分割字符串,假设"abcdef"分成n个字符长的相等部分。就我而言,我想分成2个字符长的部分。所以"abcdef"-> [ab,bc,cd,de,df]。我在这里看到类似的问题,但是答案使用str.match(/.{1,2}/gi)并输出[ab,cd,ef],这不是我想要的。

3 个答案:

答案 0 :(得分:1)

您可以将字符串拆分为单独的字母,并在它们上映射,以在每次迭代中添加前一个字母:

const input = "abcdef"

const result = input
  .split('')
  .map((letter, idx, arr) => arr[idx - 1] + letter)
  .slice(1)

console.log(result)

需要Slice(1)才能删除在第一次迭代中创建的无效对。

答案 1 :(得分:0)

这可以使用简单的for loopsubstring完成:

function foo(input, n) {
  if (input.length < n) {
    throw new Error('n is too large');
  }
  let output = [];
  for(let i = 0; i <= input.length - n; i++) {
    output.push(input.substring(i, i+n));
  }
  return output;
}

console.log(foo('abcdef', 1));
console.log(foo('abcdef', 2));
console.log(foo('abcdef', 3));
console.log(foo('abcdef', 4));
console.log(foo('abcdef', 5));
console.log(foo('abcdef', 6));
console.log(foo('abcdef', 7));

答案 2 :(得分:0)

可以使用reduce

let arr = Array.from(str).reduce((a,c,i,s)=>{if (i+n<=s.length) a.push(s.slice(i,i+n)); return a},[]);

这个想法是将字符串转换为数组,然后在循环中应用splice(i,i+n)