如何使用 reduce 将字符串拆分为 2 个字符的块
how to split a string by chunks of 2 characters using reduce
我正在尝试使用 reduce 来获得以下输出:
solution('abcdef') // should return ['ab', 'cd', 'ef']
如果字符串的长度是奇数我们应该将其转换为偶数并添加'_'(下划线)
solution('abc') // should return ['ab', 'c_']
这是我目前的位置:
- 我的 if 函数不起作用,不太确定为什么。
- 我只能得到 2 个字符串,但不能超过这些。我想我是在强迫结果变成我想要的结果,但如果我们只有 1 个字符或 2 个字符,这将不起作用?
function solution(str){
if (str.lenght % 2!==0){str.concat('_')};
console.log(str)
const array = str.split(',');
const reducer = array.reduce((acc, curr, i, arr)=>{
return [...acc, curr[i]+curr[i+1], curr[i+2]+curr[i+3]]
},[])
return reducer
}
solution('helloworl')
任何关于如何面对问题的提示和建议都会很好!
非常感谢
这样做就可以了:
let splitTwos = (str) => str.match(/\w{1,2}/g).map(e => e.length == 2?e:e+"_")
console.log(splitTwos("abcde"))
console.log(splitTwos("abcdef"))
Alan Omars 的回答可能是处理此问题的更好方法,但如果您坚持使用 array reduce,则可以这样做。将您的字符串转换为单个字符数组并像这样使用 reduce。
我不推荐这个,但它回答了你的问题。
function solution(str){
if (str.length % 2 !== 0){
str = str.concat('_');
};
const arrayOfChars = str.split('');
const reducer = arrayOfChars.reduce(
(acc, curr, i, arr) => {
if(i % 2 !== 0){
acc[acc.length - 1] = acc[acc.length - 1] + curr;
return acc;
}
return [...acc, curr];
},
[]
);
return reducer;
}
solution('helloworl');
我也觉得用match会更好,既然你要求reduce,这是我的实现
function solution(str){
if (str.length % 2 !==0){
str+='_';
}
const strarray = str.split('');
temp='';
let res = strarray.reduce((acc,cur,i,arr)=>{
if(i%2 === 0){
temp+=arr[i];
temp+=arr[i+1];
acc.push(temp)
}
temp='';
return acc;
},[]);
return res;
}
console.log(solution('helloworl'));
我正在尝试使用 reduce 来获得以下输出:
solution('abcdef') // should return ['ab', 'cd', 'ef']
如果字符串的长度是奇数我们应该将其转换为偶数并添加'_'(下划线)
solution('abc') // should return ['ab', 'c_']
这是我目前的位置:
- 我的 if 函数不起作用,不太确定为什么。
- 我只能得到 2 个字符串,但不能超过这些。我想我是在强迫结果变成我想要的结果,但如果我们只有 1 个字符或 2 个字符,这将不起作用?
function solution(str){
if (str.lenght % 2!==0){str.concat('_')};
console.log(str)
const array = str.split(',');
const reducer = array.reduce((acc, curr, i, arr)=>{
return [...acc, curr[i]+curr[i+1], curr[i+2]+curr[i+3]]
},[])
return reducer
}
solution('helloworl')
任何关于如何面对问题的提示和建议都会很好! 非常感谢
这样做就可以了:
let splitTwos = (str) => str.match(/\w{1,2}/g).map(e => e.length == 2?e:e+"_")
console.log(splitTwos("abcde"))
console.log(splitTwos("abcdef"))
Alan Omars 的回答可能是处理此问题的更好方法,但如果您坚持使用 array reduce,则可以这样做。将您的字符串转换为单个字符数组并像这样使用 reduce。
我不推荐这个,但它回答了你的问题。
function solution(str){
if (str.length % 2 !== 0){
str = str.concat('_');
};
const arrayOfChars = str.split('');
const reducer = arrayOfChars.reduce(
(acc, curr, i, arr) => {
if(i % 2 !== 0){
acc[acc.length - 1] = acc[acc.length - 1] + curr;
return acc;
}
return [...acc, curr];
},
[]
);
return reducer;
}
solution('helloworl');
我也觉得用match会更好,既然你要求reduce,这是我的实现
function solution(str){
if (str.length % 2 !==0){
str+='_';
}
const strarray = str.split('');
temp='';
let res = strarray.reduce((acc,cur,i,arr)=>{
if(i%2 === 0){
temp+=arr[i];
temp+=arr[i+1];
acc.push(temp)
}
temp='';
return acc;
},[]);
return res;
}
console.log(solution('helloworl'));