#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. Хотя этот фрагмент кода может дать решение вопроса, лучше добавить контекст относительно того, почему / как это работает. Это может помочь будущим пользователям ссылаться на эти знания и в конечном итоге применять их к своему собственному коду. Вы также, вероятно, получите положительные отзывы / положительные отзывы от пользователей, когда код будет объяснен.