给出一个类似aaabba
的字符串,我想要一个将 a 变为 b 并将 b 变为的函数> a ,返回bbbaab
。
我尝试过这种笨拙的方法:
var newa = [];
function swit(x) {
for (var i = 0; i < x.length; i++) {
if (x[i] === 'a') {
newa.push('b');
}
else if (x[i] === 'b') {
newa.push('a');
}
alert(newa);
}
}
swit("aaab");
单击大量警报后,最后一个警报将显示预期结果。但我希望它首先没有逗号-在多次迭代后不会出现:
我还尝试了string.replace()
方法-结合for
循环:
function swit(x) {
for (var i = 0; i < x.length; i++) {
if (x[i] === 'a') {
x.replace('a', 'b');
}
else if (x[i] === 'b') {
x.replace('b', 'a');
}
alert(x);
}
}
swit("aaab");
但是什么都没有改变。为什么?
能不能给我一个提示,指出出了什么问题以及如何获得理想的结果?
答案 0 :(得分:1)
最简单的方法是使用split
将文本分割成单个字符,然后通过简单地再次将a => b
和b => a
和join
替换在一起来映射字符数组,或者使用replace
'bbbaab'.split('').map(char => char === 'a' ? 'b' : 'a').join('');
'bbbaab'.replace(/a|b/g, (match) => match === 'a' ? 'b' : 'a');
function swap(str) {
return str.split('').map(char => char === 'a' ? 'b' : 'a').join('');
}
function swap2(str) {
return str.replace(/a|b/g, (match) => match === 'a' ? 'b' : 'a');
}
console.log(swap('bbbaab'));
console.log(swap2('bbbaab'));
答案 1 :(得分:1)
<template>
<div class="media">
<p>{{ log.name }}</p>
</div>
</template>
<script>
export default {
props: ['log']
}
</script>
答案 2 :(得分:0)
您的第一个示例可以工作,但是将字符串替换为字符数组(与字符串不同)。您可以简单地join
得到的数组来获得所需的结果:
function swit(x) {
var newa = [];
for (var i = 0; i < x.length; i++) {
if (x[i] === 'a') {
newa.push('b');
} else if (x[i] === 'b') {
newa.push('a');
}
}
var arrayJoined = newa.join('');
alert(arrayJoined);
return arrayJoined;
}
在第二个示例中,replace
替换字符串中所有出现的内容,并且不需要在for循环中运行。因此,您在第二个代码示例中实际执行的操作是:for each character in string: if character is 'a', replace by b. if character is 'b', replace by a
。这基本上只是将所有a
切换为b
,而b
切换回a
。导致输出字符串与输入字符串相同。
答案 3 :(得分:0)
您需要将警报行移出for循环的末尾,并使用 Array.join() 将newa
转换为不带逗号的字符串。
此外,将newa
数组声明移到swit
函数中也很有意义。
最后,您还应该考虑添加else条件,如果不是newa
或a
,则只需将完全相同的当前字符推入b
数组,因此输出字符串长度与原始字符串相同。
function swit(x) {
var newa = [];
for (var i = 0; i < x.length; i++) {
if (x[i] === 'a') {
newa.push('b');
} else if (x[i] === 'b') {
newa.push('a');
} else {
newa.push(x[i])
}
}
alert(newa.join(""));
}
swit("aaab");
swit("aasdfcvbab");