【问题标题】:Remove characters from a string then reverse it从字符串中删除字符然后反转它
【发布时间】:2021-03-03 04:14:27
【问题描述】:

我需要一个函数,它接受一个字符数组并返回相同的数组,但相反,没有“*”字符。

我尝试了很多代码都没有成功。这是我最后一次尝试(对不起,如果没有意义,我正在学习 JS)


function laClaveSecreta(carac){
    let new_str=[];
    for(i=0;i<carac.length;i++){
        if(carac[i]==="*"){
            new_str=new_str.push(carac.replace(/[*\s]/g, ''));
            
        }
        return new_str.reverse();
    }
    
 
}

//Running the function with this parameter

laClaveSecreta( [ "s", "*", "e", "n", "u", "l", " ", "s", "*", "e", " ", "a", "í", "*", "d", " ", "l", "*", "E", "*"] )

//Result I am looking for

"El día es lunes"  

【问题讨论】:

  • 先将数组转换为字符串会更容易,然后您可以在整个字符串上使用replacecarac.reverse().join("").replace(/[*]/g, "")

标签: javascript string function reverse


【解决方案1】:

先把数组转成字符串会比较容易,然后可以对整个字符串使用replace-

const input =
  [ "s", "*", "e", "n", "u", "l", " ", "s", "*", "e", " ", "a", "í", "*", "d", " ", "l", "*", "E", "*"]

console.log(input.reverse().join("").replace(/[*]/g, ""))
El día es lunes

不过,这不会教给你太多东西。我认为这是一个家庭作业或什么的。使用 reversejoinreplace 等内置函数是更高级别的。您可以使用非常基本的for 循环来解决问题 -

function laClaveSecreta(carac)
{ let r = ""
  for (const c of carac)
    if (c == "*")
      continue
    else
      r = c + r
  return r
}

const input =
  [ "s", "*", "e", "n", "u", "l", " ", "s", "*", "e", " ", "a", "í", "*", "d", " ", "l", "*", "E", "*"]

console.log(laClaveSecreta(input))
El día es lunes

【讨论】:

    【解决方案2】:

    尝试使用let filteredArray = carac.filter( char =&gt; char != '*') 然后return filteredArray.reverse().join("")

    【讨论】:

      【解决方案3】:

      我已经过滤了数组,将其反转,然后在没有正则表达式的情况下加入它。代码看起来更简洁,并解释了步骤。

      const laClaveSecreta = (arr) => arr.filter(arrItem => arrItem !== '*').reverse().join('');
      
      laClaveSecreta( [ "s", "*", "e", "n", "u", "l", " ", "s", "*", "e", " ", "a", "í", "*", "d", " ", "l", "*", "E", "*"] )
      

      【讨论】:

      • 为什么还要检查arr.lengthfilterreversejoin 也适用于空数组。当你可以写 return arr.filter(...)... 时,为什么还要为变量赋值 newStr 而烦恼?
      • 只是一个使代码可读和防故障但很好的建议的旧习惯
      【解决方案4】:

      你可以这样做......

      const laClaveSecreta  = carac =>
        {
        let new_str = '';
        for(i=carac.length;i--;)
          if(carac[i]!=="*") new_str +=carac[i]
        return new_str 
        }
      
      console.log( laClaveSecreta('s*enul s*e aí*d l*E*'))

      const laClaveSecreta  = carac => carac.reduceRight((a,c)=> (c==="*") ? a : a+c ,'')
      
      console.log( laClaveSecreta([...'s*enul s*e aí*d l*E*']))

      【讨论】:

        【解决方案5】:

        使用Array.prototype.filter() 的另一种方法。

        const input =
          [ "s", "*", "e", "n", "u", "l", " ", "s", "*", "e", " ", "a", "í", "*", "d", " ", "l", "*", "E", "*"]
        
        console.log(input.reverse().filter(item => item !== "*").join(""));

        【讨论】:

          【解决方案6】:
          function laClaveSecreta(carac){
            let new_str=[];
            for(i=0;i<carac.length;i++){
              if(carac[i] !=="*"){
                  new_str.push(carac[i]);
              }
          }
           return new_str.reverse();
          }
          

          【讨论】:

          • 虽然这段代码可以为这个问题提供一个解决方案,但最好添加上下文来说明它为什么/如何工作。这可以帮助未来的用户参考并最终将这些知识应用到他们自己的代码中。解释代码时,您也可能会得到用户的积极反馈/赞成。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-04-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-06-24
          相关资源
          最近更新 更多