【发布时间】:2017-05-26 10:34:08
【问题描述】:
问题
如果我想使用slice 来获取字符串的最后一个字符,我会这样做..
lastCharacter = theString.slice(-1);
是否可以同时使用start 和end 数字参数来选择最后一个字符?像这样..
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