У меня есть поле ввода, в которое я могу ввести текст, и я хотел бы заменить вхождение гласных цифрами.
например - (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)
Это часть задания. Как код FizzBuzz.
Вы можете взять функцию замены и взять букву для замены и объект с замещающими значениями.
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('');
}
Для чего добавлено "а". Как-то глупо выглядит xD