如何使用 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_'] 

这是我目前的位置:

  1. 我的 if 函数不起作用,不太确定为什么。
  2. 我只能得到 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'));