【问题标题】:Javascript Slice: Is is possible to use 2 parameters to select the last character of a string?Javascript Slice:是否可以使用 2 个参数来选择字符串的最后一个字符?
【发布时间】:2017-05-26 10:34:08
【问题描述】:

问题

如果我想使用slice 来获取字符串的最后一个字符,我会这样做..

lastCharacter = theString.slice(-1);

是否可以同时使用startend 数字参数来选择最后一个字符?像这样..

var start = -1;
var end = -0; // nonsensical, I realize
lastCharacter = theString.slice(start, end);

答案

没有特殊的-0数字

我问的原因

我问的原因是我希望对这两个参数都使用变量,因为我构建了一个与theString 相反的新变量,这将在每个循环上递减。直到 atomrc 的回答我才想到简单地使用 theString.length 并从最后一个字符开始工作,而不是像下面的示例中那样使用 -1 从最后一个字符开始(这需要 if 语句的第一次迭代for 循环)。

这是关于 codeschools 街机 javascript 测试“检查字符串是否为回文”的第三个问题

我的解决方案是..

function checkPalindrome(inputString) {
  var characterTotal = inputString.length;
  var inputStringStringified = inputString + '';
  var slicedLetter;
  var sliceStart = -1;
  var sliceEnd = -1;
  var backwards = '';
  for (i = characterTotal; i > 0; i--) {
    if (i === characterTotal) { // first run
      slicedLetter = inputStringStringified.slice(sliceStart);
      sliceStart = sliceStart - 1;
      backwards = backwards + slicedLetter;
    } else {
      slicedLetter = inputStringStringified.slice(sliceStart, sliceEnd);
      sliceStart = sliceStart - 1;
      sliceEnd = sliceEnd - 1;
      backwards = backwards + slicedLetter;
    }
  }
  if (inputString === backwards) {
    alert('true');
  } else {
    alert('false');
  }
}
checkPalindrome('abaaba');

我必须为第一次迭代创建一个 if 语句。有了 atomrc 的回答,我现在看到我不必为 slice 使用负数,因为我知道字符串的长度。

有了新知识,我的新解决方案会短一些..

function checkPalindrome(theString) {
  var totalCharacters = theString.length;
  var sliceStart = totalCharacters - 1;
  var sliceEnd = totalCharacters;
  var counter = totalCharacters;
  var backwardsString = '';
  while (counter > 0) {
	var character = theString.slice(sliceStart, sliceEnd);
	sliceStart--;
	sliceEnd--;
	counter--;
	backwardsString = backwardsString + character;
  }
  if (theString === backwardsString) {
	alert('its a palindrome');
  } else {
	alert('its not a palindrome');
  } 
}
checkPalindrome('abaaba');

..但仍然是一个糟糕的解决方案。解决后,我看到了其他人想出的方法,有些是简单的单线。

【问题讨论】:

    标签: javascript slice


    【解决方案1】:

    你去吧:)

    theString.slice(theString.length - 1, theString.length)
    

    【讨论】:

    • 你可以提一下,在这种情况下第二个参数不是必需的,所以它可以是:theString.slice(theString.length - 1)
    • lastCharacter = Array.from(theString).reduceRight(c => c)
    • 确实如此。我不确定作者想要达到什么目的,但他要求提供一个带有 startend 参数的版本(这样一切都是明确的,你不需要知道 slice 的内部结构来理解什么它确实......我猜)
    • 谢谢,你让我意识到我不必逆向处理负数,因为我已经知道长度了。
    猜你喜欢
    • 2021-01-19
    • 1970-01-01
    • 2018-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    • 2014-03-19
    • 2012-07-12
    相关资源
    最近更新 更多