使用Map方法在条件之一为真时结束函数

时间:2018-11-02 10:18:57

标签: javascript

我是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;
  }
});

3 个答案:

答案 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个字符- ab -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(),该函数接受字符串作为参数,如果字符串符合您的条件,则返回truefalse

该函数的第一部分涉及遍历字符串并获取字符串中的每个字符。在每次迭代(循环中的步骤)时,我们检查此字符是否等于“ 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