JavaScript:按空格分割字符串为数组及手动反转数组排障
嘿,这个其实挺简单的,JavaScript里字符串自带的split()方法就能搞定,分两种情况给你说:
基础单空格分割:直接用
split(" "),就能把字符串按单个空格拆成数组,比如:const str = "Hello World JavaScript"; const arr = str.split(" "); console.log(arr); // 输出: ["Hello", "World", "JavaScript"]处理多连续空格/首尾空格:如果字符串里有好几个连续空格,或者首尾有空格,直接用
split(" ")会把空字符串也塞进数组里,这时候用正则表达式/\s+/来匹配任意数量的空格就很方便:const str = " Hello World JS "; // 先trim去掉首尾空格,再按任意空格分割 const arr = str.trim().split(/\s+/); console.log(arr); // 输出: ["Hello", "World", "JS"]要是不想去掉首尾空格,直接用
split(/\s+/)就行,但首尾的空格会导致数组开头或结尾出现空字符串,按需选择就好。
先帮你揪出代码里的小坑,然后给你修正后的版本:
首先,你写的var zin = ["Kan jij achterstevoren praten?"];是把字符串放进了数组里,数组可是没有split()方法的,所以第一步得把zin改成纯字符串:var zin = "Kan jij achterstevoren praten?";
然后看你的函数,循环已经写了一半,其实只要把从后往前遍历到的元素放进新数组就搞定了,给你两种写法:
写法1:用push()直接添加
var zin = "Kan jij achterstevoren praten?"; var woorden = zin.split(" "); var woordenOmgedraaid = achterstevoren(woorden); document.write(woordenOmgedraaid); function achterstevoren(omgedraaid) { var woordenOmgedraaid = []; // 从数组最后一位开始遍历,依次push到新数组 for (var i = omgedraaid.length - 1; i >= 0; i -= 1) { woordenOmgedraaid.push(omgedraaid[i]); } // 最后把数组转回空格分隔的字符串,不然输出会是逗号分隔的 return woordenOmgedraaid.join(" "); }
写法2:用你定义的counter变量
如果你想保留代码里的counter,也可以这么写:
var zin = "Kan jij achterstevoren praten?"; var woorden = zin.split(" "); var woordenOmgedraaid = achterstevoren(woorden); document.write(woordenOmgedraaid); function achterstevoren(omgedraaid) { var length = omgedraaid.length; var woordenOmgedraaid = []; var counter = 0; for (var i = omgedraaid.length - 1; i >= 0; i -= 1) { woordenOmgedraaid[counter] = omgedraaid[i]; counter++; } return woordenOmgedraaid.join(" "); }
简单说下逻辑:从原数组的最后一个元素(索引是length-1)开始,逐个往前取元素,放到新数组的开头位置,这样新数组就是原数组的反转啦。最后用join(" ")把数组转回字符串,不然document.write输出的会是逗号分隔的数组内容,不是你想要的句子。
对了,要是你其实是想反转每个单词里的字符(比如把"Kan"变成"naK"),那代码得调整,但从变量名和问题描述来看,应该是反转单词顺序,上面的代码就完全能解决你的问题啦。
内容的提问来源于stack exchange,提问作者svdw

