我是JS的新手,正在尝试编写一个函数,当字符串的字母“ b”与任何字母“ a”相距3个字符时,返回真,否则返回false。例如:
“ lsufa kfba” =真
“ lsufakfba” =正确
“ viajs inabn” =假
我已经读到return语句结束了函数,但是在这种情况下,它仅将其添加到数组索引中。我如何才能在此处完全结束该功能?感谢您的帮助。
var a = "lsufa kfba";
var b = (a.split(' ').join('')).split('a'); // returns ["lsuf", "kfb", ""];
b.map(function(c, i) {
if (c[2] == 'b') {
console.log('value: ' + c[2] + ' is b; true');
return true;
} else {
console.log('false');
return false;
}
});
答案 0 :(得分:3)
使用正则表达式的解决方案:
@Column(name="PRINT_MEDIUM")
private String printMedium;
@Column(name="PRINT_QUALITY")
private String printQuality;
@Column(name="PRINT_SIZE")
private String printSize;
@Column(name="NO_OF_PRINTS")
private int numberOfPrints;
它检查除去空格后的字符串是否包含序列
const test = ["lsufa kfba", "lsufakfba", "lsufakkkkfba", "lsufbkfaa"];
function foo(str) {
let trimmed = str.replace(/\s/g, '');
return /a.{2}b/.test(trimmed) || /b.{2}a/.test(trimmed);
}
test.forEach(a=>console.log(a, foo(a)));
-2个字符- a
或b
-2个字符- b
答案 1 :(得分:2)
您正在寻找Array.some()
const a = "lsufa kfba";
function foo(str) {
let index;
return str.replace(/\s/g, '').split('').some((l, i) => {
if (l === 'a') {
index = i;
}
if (l === 'b' && i - 3 === index) return true;
})
}
console.log(foo(a));
答案 2 :(得分:2)
虽然我提供的方法可以使用其他方法简化,但是由于您提到您是JS的新手,所以我提供了一个比较冗长的答案,应该可以帮助您了解正在发生的事情。
在下面的代码段中,我创建了一个函数checkString()
,该函数接受字符串作为参数,如果字符串符合您的条件,则返回true
或false
。
该函数的第一部分涉及遍历字符串并获取字符串中的每个字符。在每次迭代(循环中的步骤)时,我们检查此字符是否等于“ a”。我们还将字母存储在变量possibleB
中偏移3的位置,该变量将使字母距字母'a'3个点。
然后,我们使用一个if语句来检查我们正在查看的当前字母(currentLetter
)是否为'a',并且当前字母(possibleB
)以外的字母3为'b '。如果是这种情况,我们可以返回true。
看看下面的代码片段和注释,以更好地了解正在发生的事情:
//whenever a string has a letter 'b' 3 characters away from any letter 'a' return true
function checkString(str) {
str = str.replace(/\s/g, ''); // remove all spaces from the string (so a ccb = accb which is now true)
for(var i = 0; i < str.length; i++) {
if(i+3 > str.length-1) { // If the index+3 is greater than the string length, then there is is no 'b'
return false;
}
var currentLetter = str[i];
var possibleB = str[i+3]
if(currentLetter == 'a' && possibleB == 'b' || currentLetter == 'b' && possibleB == 'a') { // if the current letter is a and the letter 3 stops away from our current letter is 'b', return true
return true;
}
}
return false; // If our for loop hasn't quit by returing yet, we know the string doesn't match our test case
}
// Test cases
console.log(checkString("lsufa kfba"));
console.log(checkString("lsufakfba"));
console.log(checkString("lsufa kffa lsufa kfba")); // test multiple spaces
console.log(checkString("viajs inabn"));
console.log(checkString("a ccb"));
console.log(checkString("b cca")); // test b before a