如何用数字替换字符串中字母的出现

时间:2019-06-11 05:59:26

标签: javascript reactjs

我有一个输入字段,可以在其中输入文本,我想用数字替换出现的元音。

例如-(A,E,I,O,U-1,2,3,4,5)并在所有其他辅音中添加“ a ”。

例如-输入字段将“维克多(Victor)作为输入,页面上显示的是'Va3cata4ra”。

到目前为止,我已经能够使辅音使用模板文字在其末尾显示' a ',并将变量传递给setState。但是,如上所述,让元音字母显示其数值时遇到了问题。由于某些原因,我尝试了Switchif 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 ',每个元音的数值对应于(A,E,I,O,U)-(1,2,3, 4,5)

6 个答案:

答案 0 :(得分:2)

您可以使用替换功能,并带一个字母来替换和并带有替换值。

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

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

答案 1 :(得分:1)

我假设您的代码看起来像这样,我们只需定义一个转换器函数即可将元音与数字交换并在每个辅音中添加一个“ a”。

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

答案 2 :(得分:0)

您可以创建一个对象,其中对象键为元音,并根据需要设置值。然后使用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.log(cryptInput('Victor'))

答案 3 :(得分:0)

您可以使用reduce来解决这个问题。

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.log(convertVowels('Victor'))

答案 4 :(得分:0)

您可以尝试迭代字母并替换。

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.log(p.join(''));

答案 5 :(得分:0)

您可以使用如下功能:

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('');
}