2017-02-23 21 views
3

我試圖在控制檯中記錄大寫元素,但是控制檯每次都會拋出此錯誤:TypeError:arrayNames [i] .toUpperCase不是函數如何在數組中控制大寫元素的日誌元素

var hello = "Hello, "; 
 
var arrayNames = []; 
 

 
function greet(name) { 
 

 
    if (name == null) { 
 
console.log(hello + "my friend"); 
 
    } 
 

 
    //Requirement UpperCase 
 
    arrayNames.push(name); 
 
    for (var i = 0; i < arrayNames.length; i++) { 
 
if (arrayNames[i] === arrayNames[i].toUpperCase()) { 
 
    console.log(hello.toUpperCase() + arrayNames[i].toUpperCase()); 
 
} 
 
    } 
 
    //Requirement last element 
 

 
    if (arrayNames.length > 1) { 
 
var lastElement = arrayNames.pop(); 
 
console.log(hello + arrayNames + " and " + lastElement); 
 
    } 
 
    else { 
 
console.log(hello + arrayNames); 
 
    } 
 

 
} 
 

 
greet(["James", "Julie", "BEN"]);

+8

由於'name'應該是一個字符串,但是當您調用函數'greet'時,您正在傳遞一個數組。 – nikhil

+1

感謝您的更正@nikhil – EyedFox1

回答

1

您在陣列上使用toUpperCase。
問題是行:

arrayNames.push(name); 

您正在創建一個多維數組。
使用

arrayNames = name; 

代替。

+0

我寧可建議使用'.concat' – Rajesh

1

你被這種

arrayNames.push(name)

創建數組的數組而不是做這個

arrayNames = name

這將簡單地指向同一個陣列name

toUpperCase()函數只能在字符串而不是數組上調用。

見修改後的代碼波紋管:

var hello = "Hello, "; 
 
var arrayNames = []; 
 

 
function greet(name){ 
 
    if(name==null){ 
 
    console.log(hello + "my friend") 
 
    } 
 
    //Requirement UpperCase 
 
    arrayNames = name; // NOTICE THE CHANGE HERE 
 
    for (var i = 0; i < arrayNames.length; i++) { 
 
    if(arrayNames[i]===arrayNames[i].toUpperCase()){ 
 
     console.log(hello.toUpperCase() + arrayNames[i].toUpperCase()); 
 
    } 
 
    } 
 
    //Requirement last element 
 
    if(arrayNames.length>1){ 
 
    var lastElement = arrayNames.pop(); 
 
    console.log(hello + arrayNames + " and " + lastElement); 
 
    }else{ 
 
    console.log(hello + arrayNames) 
 
    } 
 
} 
 

 
greet(["James", "Julie", "BEN"]);

+0

非常感謝你。有沒有一種方法,我可以使用一個數組的問候函數而沒有?例如,greet(「James」)會返回「Hello,James」和Greet([「James」,「Julie」,「BEN」))返回數組名稱 – EyedFox1

+0

'arrayNames = name'不會創建另一個副本陣列。它只會引用已通過的那個。所以,裏面的函數'name'和'arrayNames'是一樣的。 – RaR

+0

@RaR感謝您指出。 – vatz88

0

。在你的代碼中的錯誤,你有另一個數組推陣的名稱。

將此行「arrayNames.push(name)」替換爲「arrayNames = name;」