Посмотрите, соответствует ли конец строки - PullRequest
1 голос
/ 12 января 2020

У меня есть следующее упражнение: проверить, заканчивается ли строка (первый аргумент, str) заданной целевой строкой (второй аргумент, target), без использования метода endsWith() или любого другого метода. Что не так с моим кодом?

function confirmEnding(str, target) {
  for (var i = 1; i <= target.length; i++) {
    val = false
    if (str[str.length - i] === target[target.length - i]) {
      val = true;
    }
    return val;
  }
}
confirmEnding("Bastian", "n");

//original code from post above:
console.log(confirmEnding("Bastian", "n")); //added to provide working example

Ответы [ 2 ]

0 голосов
/ 12 января 2020

Проблема в вашем текущем коде в том, что переменная для результата инициализируется внутри l oop.

Таким образом, на самом деле он возвращает только true / false в зависимости от последнего сравниваемого символа.
Какой будет первым символом целевой строки.

Что вы можете сделать, это выбраться из этого l oop, как только будет обнаружена разница.

И дополнительно, также проверьте, не меньше ли строка, чем цель, потому что тогда она все равно будет ложной.

Fe

function confirmEnding(str, target) {
    if(str.length < target.length)
        return false;
    for (var i = 1; i <= target.length; i++) {
        if (str[str.length - i] !== target[target.length - i]) {
            return false;
        }
    }
    return true;
}

console.log(confirmEnding("Bastian", "ian")); 
console.log(confirmEnding("Bastian", "ion"));
console.log(confirmEnding("an", "ian"));
0 голосов
/ 12 января 2020

В вашем исходном коде есть несколько проблем:

Будет решать их встроенными:

function confirmEnding(str, target) {
  // using a for loop to iterate over the target string's length
  for (var i = 1; i <= target.length; i++) {
    //setting up a variable that says false
    val = false
    //trying to compare the individual characters
    if (str[str.length - i] === target[target.length - i]) {
      //so what happens here:
      //when the two match this will set val to true
      //but every time the loop is run is will reset to false.
      val = true;
    }
    //the return value is in the loop, so the loop will run once
    return val;
  }
}
confirmEnding("Bastian", "n");

С помощью приведенного выше сценария вы не сможете узнать, совпадают ли все символы. Если последний символ совпадает, он вернет true, даже если другие символы не совпадают.

string: Bastian target: irr

Вернет true в логах c вашего l oop.

Взгляните на код ниже и комментарии в нем!

function confirmEnding(str, target) {
  //get the length of the target string
  const targetLength = target.length;
  //set up an empty string  
  let endstr = "";
  for (let i = 1; i <= targetLength; i++)
  {
    //start at 1 since str.length-1 is last character
    //fill the empty string with the last characters of str
    endstr = str[str.length-i] + endstr;
  }
  //compare and return
  return target === endstr;
}

console.log(confirmEnding("Bastian", "ian")); //TRUE
console.log(confirmEnding("Bastian", "in")); //FALSE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...