Как изменить оператор if / else для цикла в javascript - PullRequest
0 голосов
/ 19 сентября 2019

Я бы хотел изменить оператор if / else на циклы в функции, которая получает строку и возвращает новую строку, которая заменяет гласные буквы на следующую после нее букву.

function changeVowels(str) {
        var alphabet = 'abefijopuvABEFIJOPUV';
        var strNew = ""
        for(var i = 0; i < str.length; i++){
           for(var j = 0; j < alphabet.length; j++){
             if(str[i] === alphabet[j] && j%2 === 0){
               strNew += alphabet[j+1]
            }
          }
          if(str[i]==='a' || str[i]==='i' || str[i]==='u'||str[i]==='e' || str[i]==='o'){}
          else if(str[i]==='A' || str[i]==='I' || str[i]==='U'|| str[i]==='E' || str[i]==='O'){}
          else{
           strNew+=str[i]
          }
        }
        return strNew
      }

console.log(changeVowels('Car'))

как поменять оператор if / else ниже на циклы?

if(str[i]==='a' || str[i]==='i' || str[i]==='u'||str[i]==='e' || str[i]==='o'){}
else if(str[i]==='A' || str[i]==='I' || str[i]==='U'|| str[i]==='E' || str[i]==='O'){}
else{strNew+=str[i]}

или я не против, чтобы вы изменили его помимо цикла или сделали егокороче

Ответы [ 5 ]

2 голосов
/ 19 сентября 2019

Вы можете проверить, является ли символ гласным, а затем взять следующую букву из заданной строки или фактической буквы.

function changeVowels(str) {
  var alphabet = 'abefijopuvABEFIJOPUV';
  var strNew = ""
  for (var i = 0; i < str.length; i++) {
    if ('aeiou'.includes(str[i].toLowerCase())) {
      strNew += alphabet[alphabet.indexOf(str[i]) + 1];
    } else {
      strNew += str[i];
    }
  }
  return strNew;
}

console.log(changeVowels('Car'))
1 голос
/ 19 сентября 2019

Вот еще один интересный способ сделать это

function changeVowels(str) {
    var x = {a:'b', e:'f', i:'j', o: 'p', u: 'v', A: 'B', E: 'F', I: 'J', O: 'P', U: 'V'};
    return str.split('').map(l => x[l] || l).join('');
}
console.log(changeVowels('Car'))

Или, если вы действительно этого хотите, alphabet var

function changeVowels(str) {
    var alphabet = 'abefijopuvABEFIJOPUV';
    var x = Object.fromEntries(alphabet.match(/../g).map(kv => kv.split('')));
    return str.split('').map(l => x[l] || l).join('');
}
console.log(changeVowels('Car'))

Объяснение var x = Object.fromEntries(alphabet.match(/../g).map(kv => kv.split('')));

alphabet.match(/../g) создает массив ['ab', 'ef', 'ij', ... etc]

.map(kv => kv.split('')) сопоставляет вышеприведенное с [['a', 'b'], ['e', 'f'], ... etc

Object.fromEntries([['a', 'b'], ['e', 'f'] .... etc]) производит

{
    a: 'b',
    e: 'f',
    i: 'j',
    o: 'p',
    u: 'v',
    A: 'B',
    E: 'F',
    I: 'J',
    O: 'P',
    U: 'V'
};

так же, как первый фрагмент

0 голосов
/ 19 сентября 2019

Я сделаю это проще для вас

function changeVowels(str) {
        var alphabet = 'abefijopuvABEFIJOPUV';
        for(var i = 0; i < alphabet.length; i++){
           str = str.replace(new RegExp(alphabet[i], 'g'), alphabet[i+1]);
           i++
        }
        return str
}

console.log(changeVowels('Facebook'))
0 голосов
/ 19 сентября 2019

отделите вашу строку и проверьте, существуют ли они в вашей алфавитной переменной.если он присутствует, значит, вы получите следующий символ или же вернете тот же символ и т. д.

var alphabet = 'abefijopuvABEFIJOPUV';

function changeVowels(str) {
const newArray = str.split('').map(element => {
  let index = alphabet.indexOf(element);
  if(index > -1) {
return alphabet.charAt(index + 1);
  } else {
return element;
  }
})
return newArray.join('');
}

console.log('final ---  ', changeVowels('Car'))
0 голосов
/ 19 сентября 2019

Вам не нужны циклы, чтобы упростить этот код.

И str[i]==='a' || str[i]==='i' || str[i]==='u'||str[i]==='e' || str[i]==='o', и str[i]==='A' || str[i]==='I' || str[i]==='U'|| str[i]==='E' || str[i]==='O' - это примерно одинаковые буквы, но с разной капитализацией, поэтому вы можете сократить код вдвое, рассматривая только один случай.(верхний или нижний) и преобразование чего-либо к этому.Если вы извлекаете str[i] в качестве переменной, вы можете еще больше уменьшить повторение:

var char = str[i].toUpperCase();
/* ... */
if (char==='A' || char==='I' || char==='U'|| char==='E' || char==='O') {}

вы можете дополнительно уменьшить несколько OR, если вы используете массив и Array # включает в качестве альтернативы String # включает будет делать то же самое, но я буду использовать массив, поскольку он немного более универсален для значений, даже если строка будет короче.

if (['A', 'I', 'U', 'E', 'O'].includes(char)) {
  /* code */
} else {
  strNew+=str[i];
}

и если вы хотитеничего не делать в первом случае, вы можете просто устранить else, инвертировав условие:

if (!['A', 'I', 'U', 'E', 'O'].includes(char)) {
//  ^ invert the result
  strNew+=str[i];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...