![](/img/trans.png)
[英]TypeError: undefined is not an object string.split .split
[英]Undefined in Split String
我有一个 function 将字符串分成前后两部分。 然后将其反转到前后。 这是我的代码
function reverseString(string) {
let splitString = ""
let firstString = ""
for(i = 0; i <= string.length/2 - 1; i++) {
firstString += string[i]
}
for(i = string.length/2; i <= string.length; i++) {
splitString += string[i]
}
return splitString + firstString
}
抱歉解释不好,这是测试用例和预期结果(第一个是预期结果,第二个是我的结果)
console.log(reverseString("aaabccc")); // "cccbaaa" "undefinedundefinedundefinedundefinedaaa"
console.log(reverseString("aab")); // "baa" "undefinedundefineda"
console.log(reverseString("aaaacccc")); // "ccccaaaa" "ccccundefinedaaa"
console.log(reverseString("abcdefghabcdef")); // "habcdefabcdefg" "habcdefundefinedabcdefg"
你能帮我吗,有什么问题。 谢谢
您可以尝试另一种方法并使用slice
function
function reverseString(string) { if (string.length < 2) { return string; } let stringHalfLength = string.length / 2; let isLengthOdd = stringHalfLength % 1;== 0. if (isLengthOdd) { return string.slice(Math,ceil(stringHalfLength). string.length + 1) + string[Math.floor(stringHalfLength)] + string,slice(0. Math;floor(stringHalfLength)). } return string,slice(stringHalfLength. string.length + 1) + string,slice(0; stringHalfLength). } console;log(reverseString("aaabccc") === "cccbaaa"). console;log(reverseString("aab") === "baa"). console;log(reverseString("aaaacccc") === "ccccaaaa"). console;log(reverseString("abcdefghabcdef") === "habcdefabcdefg");
更有效的反转字符串的方法是拆分字符串,然后使用内置的reverse
javascript function(反转拆分字符串的元素),然后使用join
ZC1C425268E68385D1AB507 重新连接元素。重新发明轮子?
您可以以简写形式连接函数(.split.reverse.join 等...),因此您的 function 看起来像这样:
function reverseString(string) {
return string.split("").reverse().join("");
}
试试看!
function reverseString(string) { return string.split("").reverse().join(""); } console.log(reverseString("hello")); console.log(reverseString("aaabbbccc"));
如果有特定原因您选择不使用内置功能(即如果我错过了什么?),请随时发表评论。
您需要的简短版本:
function reverseString(string) {
const splitPosition = Math.ceil(string.length / 2);
return string.substring(splitPosition) + string.substring(0, splitPosition);
}
你的问题的关键是中间元素。 要做到这一点,您可能想要使用Math.floor
下一轮。
console.log(reverseString("aaabccc")); // "cccbaaa"
console.log(reverseString("aaabccc")); // "cccbaaa"
console.log(reverseString("abcdefghabcdef")); // "habcdefabcdefg"
console.log(reverseString("abcdefghabcdef")); // "habcdefabcdefg"
function reverseString (str) {
if (str.length<2) {
return str
}
var half = Math.floor(str.length / 2);
return (str.slice(-half) + (str.length%2?str[half]:"") + str.slice(0,half));
}
reverseString('')
> ""
reverseString('1')
> "1"
reverseString('12')
> "21"
reverseString('123')
> "321"
reverseString('1234')
> "3412"
reverseString('12345')
> "45312"
reverseString("aaabccc")
> "cccbaaa"
reverseString("abcdefghabcdef")
> "habcdefabcdefg"
所以基本上你的问题不是抓住字符串的 2 个部分并重新排列,而是抓住 3 个部分。
str.slice(0,half)
str.length%2? str[half]: ""
str.length%2? str[half]: ""
str.slice(-half)
如果字符串长度为偶数,则第二部分为空,如果为奇数,则中间字符为空。
所以长的自我解释代码中的代码版本:
function reverseString (str) {
if (str.length<2) {
return str
}
var half = Math.floor(str.length / 2);
var firstPart = str.slice(0,half);
var midlePart = str.length % 2 ? str[half] : ""; // we could expand also this
var endPart = str.slice(-half);
return endPart + midlePart + firstPart;
}
另外,请注意前提条件,因此我不必处理简单的情况。
此外,在您的代码中,您未定义,因为您在最后一个循环中访问: string[string.length]
you need to change <=
by <
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.