2017-05-26 41 views
0

问题Javascript Slice:是否可以使用2个参数来选择字符串的最后一个字符?

如果我想使用slice得到一个字符串的最后一个字符,我会做..

lastCharacter = theString.slice(-1); 

是否有可能同时具有startend选择的最后一个字符数值参数?这样的..

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

答案

有没有特殊-0位

我问

的原因,我问的原因是我一直在寻找使用变量对于这两个参数,这将在每个循环上递减,因为我建立了一个新的变量,这个变量与theString相反。直到atomrc的答案,我不认为简单地使用​​并从最后一个字符开始工作,而不是像-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');

我不得不创建一个如果声明为第一次迭代。有了atomrc的回答,我现在看到我没有必要使用负数来切片,因为我知道字符串的长度。

有了新的认识我的新的解决方案是一个有点短..

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

..但仍然是一个可怕的解决方案。解决之后,我看到别人提出了什么,有些简单的一个内衬。

回答

0

你去那里:)

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

你可以提的是,第二个参数是不是在这种情况下,必要的,所以它可能只是:'theString.slice(theString.length - 1)'' – radiovisual

+0

lastCharacter = Array.from(theString).reduceRight(c => c)' –

+0

的确如此。我不确定作者想要实现什么,但他要求一个带有“start”和“end”参数的版本(这样一切都是明确的,你不需要知道“slice”的内部知道什么它确实......我猜) – atomrc

相关问题