Javascript TypeError:mainArr.join不是函数

Javascript TypeError:mainArr.join不是函数,javascript,arrays,string,join,Javascript,Arrays,String,Join,mainArr.join()。上面说 TypeError:mainArr.join不是函数 但是在这种情况下,它不应该在if块中也工作 translatePigLatin("california"); function translatePigLatin(str) { var mainArr = str.split(""); if (mainArr[0] == "a" || mainArr[0] == "e" || mainArr[0] == "i" || mainA

mainArr.join()。上面说

TypeError:mainArr.join不是函数

但是在这种情况下,它不应该在if块中也工作

 translatePigLatin("california");

 function translatePigLatin(str) {
     var mainArr = str.split("");

     if (mainArr[0] == "a" || mainArr[0] == "e" || mainArr[0] == "i" || mainArr[0] == "o" || mainArr[0] == "u") {
         str = mainArr.join("");
         str = str + "way";
     } else {
         var count = 0;
         var len = mainArr.length;

         for (i = 0; i < mainArr.length; i++) {
             if (mainArr[i] != "a" && mainArr[i] != "e" && mainArr[i] != "i" && mainArr[i] != "o" && mainArr[i] != "u") {
                 mainArr = mainArr.push(mainArr[0]);
                 count++;
             } else {
                 i = mainArr.length;
             }
         }

         var mainStr = mainArr.join();
         mainStr = mainStr.substr(count - 1, len);
         mainStr = mainStr + "ay";
         str = mainStr;
     }

     return str;
 }
翻译拉丁语(“加利福尼亚”);
功能翻译表位拉丁语(str){
var mainArr=str.split(“”);
如果(mainArr[0]=“a”| | mainArr[0]=“e”| | mainArr[0]=“i”| | mainArr[0]=“o”| | mainArr[0]=“u”){
str=mainArr.join(“”);
str=str+“方式”;
}否则{
var计数=0;
var len=主长度;
对于(i=0;i
因此错误在于,在推送的结果之后,您将分配回mainArr,这在这里是错误的
mainArr=mainArr.push(mainArr[0])as
mainArr.push(mainArr[0])返回数组的新长度

除此之外,您还可以通过使用break来改进逻辑,而不是在else部分中将迭代器设置为数组长度

console.log(翻译为拉丁语(“california”);
功能翻译表位拉丁语(str){
var mainArr=str.split(“”);
如果(mainArr[0]=“a”| | mainArr[0]=“e”| | mainArr[0]=“i”| | mainArr[0]=“o”| | mainArr[0]=“u”){
str=mainArr.join(“”);
str=str+“方式”;
}否则{
var计数=0;
var len=主长度;
对于(i=0;i}
mainArr=mainArr.push(mainArr[0]);嘿,谢谢你的帮助,但我有一个疑问,为什么将push的结果分配给mainArr是错误的?因为它在推送一个元素后重新计算数组的长度,因此你的数组将不再是一个数组
concat()
返回一个新数组,它将与
mainArr=mainArr.concat(mainArr[0])一起工作但是这不是必需的,因为mainArr.push()将为您完成此工作