繁体   English   中英

拆分字符串中未定义

[英]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 个部分。

  • 1 部分: str.slice(0,half)
  • 2 部分: str.length%2? str[half]: "" str.length%2? str[half]: ""
  • 3 部分: 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM