我正在尝试使用for..loop来描述.endsWith()方法

时间:2019-11-08 12:58:59

标签: javascript

我基本上是想编写一个函数,该函数在调用时执行endsWith()方法的动作

我尝试遍历原始字符串和要使用for循环进行测试的字符串

function confirmEnding(str, target) {
  let strWord = '';
  let targetWord = '';
  for (let i = (target.length - 1); i >= 0; i--) {
    targetWord.concat(target.charAt(i))
    for (let j = (str.length - 1); j >= 0; j--) {
      strWord.concat(str.charAt(j));

    }
  }
  if (strWord == targetWord) {
    return true
  } else {
    return false
  }
}

现在无论何时我调用该函数,它都会返回true,我的代码有什么问题?

2 个答案:

答案 0 :(得分:0)

最主要的是,您使用的是嵌套循环。没必要这样做。

一种简单的方法(除了使用endsWith之外)是获取str的末尾(使用target的长度),然后将该子字符串与{{1 }}:

target

输入您的实际代码:

  1. function confirmEnding(str, target) { return str.length >= target.length && str.slice(-target.length) === target; } 不会修改您调用的字符串,它会返回一个 new 字符串(必须;字符串为 JavaScript中不可变 [不可更改]

  2. 如果您修复#1,则外循环只会将concat复制到target,但顺序相反。您的 inner 循环重复以相反的顺序将targetWord复制到str,因此最终您会在其中复制strWord个副本target.length

  3. 该函数中的所有内容都尝试仅获取strWord part (最后一部分,长度与str相同)。您最终将比较完整字符串(如果您修复了#1和#2),而不是比较target末尾的子字符串。

最后,请注意:只要您发现自己在写作:

str

您可以更简洁,惯用地书写

if (a == b) {
    return true;
} else {
    return false;
}

这完全相同。 :-)

答案 1 :(得分:0)

concat 返回新字符串。

改为使用<span unselectable="on" class="k-dropdown-wrap k-state-default"><span unselectable="on" class="k-input">Chang</span><span unselectable="on" class="k-select" aria-label="select"><span class="k-icon k-i-arrow-60-down"></span></span></span> Code: from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.support.select import Select from selenium.webdriver.common.keys import Keys import time driver = webdriver.Chrome('./chromedriver') driver.get("https://demos.telerik.com/kendo-ui/dropdownlist/remotedatasource") select = driver.find_element_by_xpath('//*[@id="example"]/div/span/span/span[1]')[0] select.SelectByValue("Chang"); print('Success')