2016-05-14 164 views
0

我目前正在为Free Code Camp编写一个算法。该算法要我将文本转换为拉丁文。但是,我遇到的问题与Pig Latin没有关系,但是在我的代码中有些问题。下面是我得到的错误:猪拉丁算法 - .push()不是函数

stringArray.push('a', 'y');

,这里是我的代码:

function translatePigLatin(str) { 
    var consonantCluster = []; 
    var vowels = ['a', 'e', 'i', 'o', 'u']; 
    var stringArray = str.split(''); 

    //If stringArray begins with a vowel, add 'way' to the end 
    if (vowels.indexOf(stringArray[0]) === 0) { 
     stringArray.push('w', 'a', 'y'); 
     stringArray = stringArray.join(''); 
     str = stringArray; 
     console.log(str); 
    } 

    //If stringArray begins with consonant (or cluster), move to end of the stringArray and add 'ay' 
    //Get all consonants up until first vowel 
    for (var i = 0; i < stringArray.length; i++) { 
     if (vowels.indexOf(stringArray[i]) == -1) { 
      consonantCluster.push(stringArray[i]); 
      stringArray.push(stringArray[i]); 
     } else { 
      stringArray.push('a', 'y'); 
      stringArray.splice(0, consonantCluster.length); 
      stringArray = stringArray.join(''); 
      str = stringArray; 
      break; 
     } 
    } 

    console.log(str); 
    return str; 
} 

translatePigLatin("apple"); 

我的代码返回预期的结果,但它仍然报告错误。任何人都可以帮忙吗?在此先感谢:)

回答

0

看来你忘了在if声明内返回。然后stringArray = stringArray.join('')使stringArray为一个字符串,它没有push

function translatePigLatin(str) { 
    var consonantCluster = []; 
    var vowels = ['a', 'e', 'i', 'o', 'u']; 
    var stringArray = str.split(''); 
    if (vowels.indexOf(stringArray[0]) === 0) { 
     stringArray.push('w', 'a', 'y'); 
     stringArray = stringArray.join(''); 
     return stringArray; // <-- exit function 
    } 
    for (var i = 0; i < stringArray.length; i++) { 
     if (vowels.indexOf(stringArray[i]) == -1) { 
      consonantCluster.push(stringArray[i]); 
      stringArray.push(stringArray[i]); 
     } else { 
      stringArray.push('a', 'y'); 
      stringArray.splice(0, consonantCluster.length); 
      stringArray = stringArray.join(''); 
      str = stringArray; 
      break; 
     } 
    } 
    return str; // <-- exit function 
} 
translatePigLatin("apple"); 
0

简单地说,你是调用一些对象的方法push不具备的方法push,从而错误

.push()是不是一个函数

因为你有很多代码中有不同的分支,这可能不是一个完整的包含错误,但很可能,方法.joinstringArray上执行...因此stringArray不再是一个数组,而只是一个字符串。 String没有称为push的方法。

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/join