Как я могу заменить вхождение буквы в строке на число

У меня есть поле ввода, в которое я могу ввести текст, и я хотел бы заменить вхождение гласных цифрами.

например - (A,E,I,O,U - 1,2,3,4,5) и добавить 'а' ко всем остальным согласным.

например - Поле ввода принимает «Виктор» в качестве ввода, а на странице печатается «Va3cata4ra».

До сих пор мне удавалось заставить согласные отображать «а» в конце, используя литералы шаблона и передавая переменную в setState. Однако у меня возникают проблемы с отображением гласных их числовых значений, как описано выше. Я пробовал Switch , if else почему-то ничего не работает

export default class App extends Component {

state = {
    mytext: ''
}

onChangeHandler = (event) => {
        const newText = event.target.value;
        const splitText = newText.split('');
        let tempArr = []

        for (let onye in splitText) {
            else if (onye === 'e') {
                onye.replace(parseInt('2'))
            } else if (onye === 'i') {
                onye.replace(parseInt('3'))
            } else if (onye === 'o') {
                onye.replace(parseInt('4'))
            } else if (onye === 'u') {
                onye.replace(parseInt('5'))
            } else {
                return onye
            }

            //This got the consonants to display a after each one

            const raCon = `${splitText[onye]}a`
            tempArr.push(raCon)
        }

        this.setState({
            mytext: tempArr
        })

Ожидаемый результат будет иметь «а» в конце каждой согласной и числовые значения для каждой гласной, соответствующие (A, E, I, O, U)- (1,2,3,4,5)

Для чего добавлено "а". Как-то глупо выглядит xD

Chris Ngo 11.06.2019 08:17

Это часть задания. Как код FizzBuzz.

Victor O'Frank 12.06.2019 12:23
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
76
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Вы можете взять функцию замены и взять букву для замены и объект с замещающими значениями.

function replace(string) {
    return string.replace(/[aeiou]/gi, c => ({ a:1, e: 2, i: 3, o: 4, u: 5 }[c.toLowerCase()]));
}

console.info(replace('banana'));

Я предполагаю, что ваш код выглядит примерно так, мы можем просто определить функцию конвертера, чтобы поменять местами гласные с числами и добавить «а» к каждой согласной.

class App extends React.Component {
  state = {
    myText: ""
  };

  onChange = event => {
    this.setState({
      myText: event.target.value
    });
  };

  convertWord = word => {
    let vowels = ["a", "e", "i", "o", "u"];
    let letters = word.toLocaleLowerCase().split("");

    return letters.map(letter =>
      vowels.includes(letter) ? vowels.indexOf(letter) + 1 : letter + "a"
    );
  };

  render() {
    return (
      <div>
        <input onChange = {this.onChange} value = {this.state.myText} />
        Converted Word: {this.convertWord(this.state.myText)}
      </div>
    );
  }
}

См. также песочницу: https://codesandbox.io/s/priceless-mcnulty-xyhbr.

Ответ принят как подходящий

Вы можете создать объект, в котором ключами объекта будут гласные, и установить требуемое значение. Затем используйте split, чтобы создать массив символов входного текста. и используйте reduce для создания новой строки. В функции обратного вызова reduce проверьте, является ли текущий символ на итерации ключом объекта. Если это так, извлеките значение и concat, иначе просто соедините текущий символ и a и верните его.

let vowelCrypt = {
  a: 1,
  e: 2,
  i: 3,
  o: 4,
  u: 5
}

function cryptInput(input) {
  if (input.length > 0) {
    return input.split('').reduce(function(acc, curr) {
      if (vowelCrypt[curr]) {
        acc += vowelCrypt[curr];
      } else {
        acc += curr + 'a';
      }
      return acc;
    }, '')


  }
}

console.info(cryptInput('Victor'))

Вы можете использовать сокращение, чтобы решить эту проблему.

const convertVowels = (str) => {
	const vowels = ['a','e','i','o','u'];
	return str.split('').reduce((newStr, char) => {
		if (vowels.includes(char)) {
			return newStr += (vowels.indexOf(char)+1)
		} else {
			return newStr += char+'a';
		}
	}, '');
}

console.info(convertVowels('Victor'))

Можно попробовать перебрать буквы и заменить.

const newText = event.target.value;
const wovels = ['A','E','I','O','U'];
let p = newText.split('').map(e => {   
    let idx = wovels.indexOf(e.toUpperCase());
    if (idx !== -1){
        return idx+1;
    } else {
        return e+'a';
    }
})
console.info(p.join(''));

Вы можете использовать такую ​​функцию:

function converter(str) {
  charArr = str.split('');
  charArr.forEach(function (c, i) {
    if (c === 'a') {
      charArr[i] = 1;
    } else if (c === 'e') {
      charArr[i] = 2;
    } else if (c === 'i') {
      charArr[i] = 3;
    } else if (c === 'o') {
      charArr[i] = 4;
    } else if (c === 'u') {
      charArr[i] = 5;
    } else {
      charArr[i] += 'a';
    }
  });
  return charArr.join('');
}

Другие вопросы по теме