Замена А на А, если следующее слово начинается с гласной - PullRequest
1 голос
/ 05 февраля 2020

Я взломал простое решение, но оно кажется мне немного грязным, поэтому я надеялся, что кто-нибудь сможет показать мне более эффективный способ выполнения sh этого.

По сути, я просто пытаюсь сделать возвращаемую строку допустимой Engli sh путем преобразования A в An, если следующее слово начинается с гласной.

ie:

Шарик круглый
Слон - серый

Я сделал это, просто сделав функцию, которую я вызываю, когда использую значение A, и возвращаю A или An.

function convertAorAn(val){
    const letter = val.charAt(0).toLowerCase();
    if(
        letter === 'a' ||
        letter === 'e' ||
        letter === 'i' ||
        letter === 'o' ||
        letter === 'u'
     ) {
        return "An"
    } else {
        return "A"
    }
}

И используйте его так:

{convertAorAn(value)} {value} is {otherValue}

Для достижения:
Ноутбук тонкий
или
Аллигатор грубый

Есть ли лучший способ сделать это преобразование, чем написанная моя функция?

Ответы [ 4 ]

1 голос
/ 05 февраля 2020

Я не видел этого, но он был упомянут.

function convertAorAn(val){
  s = new Set(['a','e', 'i', 'o', 'u'])
  const letter = val.charAt(0).toLowerCase();
  return s.has(letter) ? 'An' : 'A';
}
1 голос
/ 05 февраля 2020

Ваш код в порядке. Конечно, есть и другие возможные решения. Можно было бы заменить if на switch:

function convertAorAn(val){
  switch (val.charAt(0).toLowerCase()) {
    case 'a':
    case 'e':
    case 'i':
    case 'o':
    case 'u':
      return 'An';
    default:
      return 'A';
  }
}

Другой вариант - использовать includes вместо проверки каждой буквы отдельно:

function convertAorAn(val){
  const letter = val.charAt(0).toLowerCase();
  if ('aeiou'.includes(letter)) {
    return 'An';
  }
  return 'A';
}

Наконец Вы можете использовать регулярное выражение, чтобы соответствовать первому символу в val:

function convertAorAn(val){
  return /^[aeiou]/i.test(val) ? 'An' : 'A';
}

В конце концов, это действительно вопрос стиля, и что будет наиболее читабельным для вас и вашей команды через шесть месяцев после дорога.

0 голосов
/ 05 февраля 2020

Вы можете очистить проверку гласных с помощью включений

function convertAorAn(val){
  const letter = val.charAt(0).toLowerCase();
  const isVowel = 'aeiou'.includes(letter);
  return isVowel ? "An" : "A";
}

Я бы сделал все это с помощью регулярного выражения с заменой на совпадения a и an и заменил бы их заглавными буквами. Убран гласный чек с жала включает.

function cleanA (str) {
  const vowels = 'aeiou'
  return str.replace(/\b(an?)\s(.)/gi, function (m, a, l) {
    const word = (a[0] === 'A' ? 'A' : 'a') + (vowels.includes(l.toLowerCase()) ? 'n' : '');
    return `${word} ${l}`
  })
}


console.log(cleanA('A ball is round. A apple is red. I love an red firetruck with a ladder.'))
0 голосов
/ 05 февраля 2020

function convertAorAn(val){
  return ['a', 'e', 'i', 'o', 'u'].some(currentVal => currentVal === val) ? 'An' : 'A';
}

let result1 = convertAorAn('a');
console.log(result1); // output => An
let result2 = convertAorAn('b');
console.log(result2); // output => A

Вы можете использовать Array.some для достижения требуемого результата

Ссылка: Array.some

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...