Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在拆分字符串中未定义_Javascript - Fatal编程技术网

Javascript 在拆分字符串中未定义

Javascript 在拆分字符串中未定义,javascript,Javascript,我有一个函数可以将字符串分成两部分,前面和后面。然后前后颠倒。这是我的密码 function reverseString(string) { let splitString = "" let firstString = "" for(i = 0; i <= string.length/2 - 1; i++) { firstString += string[i] } for(i = strin

我有一个函数可以将字符串分成两部分,前面和后面。然后前后颠倒。这是我的密码

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
}

你能帮我一下吗?有什么问题吗。谢谢

您可以尝试另一种方法并使用
切片
功能

函数反向限制(字符串)
{
if(string.length<2){返回字符串;}
设stringhallength=string.length/2;
设isLengthOdd=stringHalfLength%1!==0;
如果(isLengthOdd){
返回string.slice(Math.ceil(stringhallength),string.length+1)+string[Math.floor(stringhallength)]+string.slice(0,Math.floor(stringhallength));
}
返回string.slice(stringhallength,string.length+1)+string.slice(0,stringhallength);
}
日志(反向限制(“aaabccc”)=“cccbaaa”);
控制台日志(反向限制(“aab”)=“baa”);
console.log(反向限制(“aaaacccc”)==“ccccaaaaa”);

日志(反向限制(“abcdefghabcdef”)==“habcdefabcdefg”)
反转字符串的更有效方法是拆分字符串,然后使用内置的
reverse
javascript函数(反转拆分字符串的元素),然后使用
join
函数重新连接元素。。不需要重新发明轮子吗

您可以用速记方式连接函数(.split.reverse.join等),使函数看起来像这样:

function reverseString(string) {
    return string.split("").reverse().join("");
}
试试看

函数反向限制(字符串){
返回字符串.split(“”).reverse().join(“”);
}
log(reverseString(“hello”);

日志(反向限制(“aaabbccc”)所需内容的简短版本:

function reverseString(string) {
    const splitPosition = Math.ceil(string.length / 2);
    return string.substring(splitPosition) + string.substring(0, splitPosition);
}

你问题的关键是中间环节。要实现这一点,您可能需要使用下一轮的
Math.floor

console.log(反向限制(“aaabccc”);//“cccbaaa”
console.log(反向限制(“abcdefghabcdef”);//“habcdefg”

另外,请注意前提条件,这样我就不必处理简单的案例

此外,在您的代码中,由于您在最后一个循环中访问了:
string[string.length]
string.length
为奇数时,您需要更改
string.length/2
不是整数。另一个问题是
我说了另一种方式,
string[1.5]
应该返回什么?@HereticMonkey它应该返回原始字符串,例如如果“aaabccc”“cccbaaa”它与未定义的
无关,但您还需要声明
i
。Righ tnow您的代码正沦为我所称的对象,并创建了一个全局
I
变量。
function reverseString(string) {
    const splitPosition = Math.ceil(string.length / 2);
    return string.substring(splitPosition) + string.substring(0, splitPosition);
}
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"
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;
 }