Удалите символы из строки, затем переверните ее

#javascript #string #function #reverse

#javascript #строка #функция #обратный

Вопрос:

Мне нужна функция, которая принимает массив символов и возвращает тот же массив, но перевернутый и без символа «*».

Я безуспешно перепробовал много кодов. Это была моя последняя попытка (извините, если не имеет смысла, я изучаю 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"  
 

Комментарии:

1. было бы проще сначала преобразовать массив в строку, а затем использовать replace для всей строки. carac.reverse().join("").replace(/[*]/g, "")

Ответ №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
 

Однако это вас многому не научит. Я предполагаю, что это домашнее задание или что-то в этом роде. Использование встроенных функций, таких как reverse , join , и replace являются высокоуровневыми. Вы можете решить проблему, используя очень простой 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 => char != '*') then 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", "*"] )
 

Комментарии:

1. зачем беспокоиться о проверке arr.length ? filter , reverse а join также работать с пустыми массивами. зачем беспокоиться о назначении переменных newStr , когда вы можете просто написать return arr.filter(...)... вместо этого?

2. Просто старая привычка делать код читаемым и безотказным, но хорошие предложения

Ответ №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();
}
 

Комментарии:

1. Хотя этот фрагмент кода может дать решение вопроса, лучше добавить контекст относительно того, почему / как это работает. Это может помочь будущим пользователям ссылаться на эти знания и в конечном итоге применять их к своему собственному коду. Вы также, вероятно, получите положительные отзывы / положительные отзывы от пользователей, когда код будет объяснен.