【问题标题】:how to split a string by chunks of 2 characters using reduce如何使用reduce将字符串分成2个字符的块
【发布时间】:2021-03-14 20:43:36
【问题描述】:

我正在尝试使用 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')

任何关于如何面对问题的提示和建议都会很好! 非常感谢

【问题讨论】:

  • 使用reduce函数会使事情变得更复杂:-)

标签: javascript arrays string function reduce


【解决方案1】:

这样就可以了:

let splitTwos = (str) => str.match(/\w{1,2}/g).map(e => e.length == 2?e:e+"_")

console.log(splitTwos("abcde"))
console.log(splitTwos("abcdef"))

【讨论】:

    【解决方案2】:

    我也认为使用 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函数的方式。它非常清晰!我是一个初学者,并且真的陷入了对解决方案的思考中。
    • 很高兴能提供帮助,它应该可以工作,我拼错了“长度”!
    【解决方案3】:

    Alan Omars 的回答可能是处理此问题的更好方法,但如果您坚持使用数组 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');
    

    【讨论】:

    • 这个很好,但是检查,仍然不处理字符串的奇数或偶数长度来添加下划线,它在两种情况下都添加它。感谢您对实际减少的思考,帮助很多人看到其他人的实现
    • 与其他答案相同,我也拼错了长度。我想我们都复制了你的错字
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-10
    • 1970-01-01
    • 2012-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    相关资源
    最近更新 更多