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