2017-02-23 46 views
0

如果數組的長度大於1,那麼我希望控制檯記錄所需的代碼,但控制檯會記錄else語句。如果陣列的長度大於1,則執行

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

function greet(name){ 

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

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

    } 

} 
//Requirement last element 
arrayNames.push(name) 

if(arrayNames.length>1){ 

    var lastElement = arrayNames.pop() 
    console.log(hello + arrayNames + " and " + lastElement) 
} 


else{ 
    console.log(hello + arrayNames) 
} 


} 

greet(["James", "Garry", "JOSHUA", "steven"]) 
+1

你的數組長度是'1' - 你有一個數組,在第一個索引處包含另一個數組。 '.concat'會將兩個數組合並在一起,'push'只是在最後一個索引處添加整個數組。 – tymeJV

回答

1

您正在將整個數組作爲一個元素推入另一個數組。

//Requirement last element 
arrayNames.push(name) //[Array[4]] 

//change this to 
Array.prototype.push.apply(arrayNames, name) 

// if you want to use spread operator do this 
arrayNames.push(...name) 
+0

謝謝@ Hitesh庫馬爾。但是,當我只有一個名稱作爲一個沒有數組的參數時,它會拋出一個錯誤TypeError:CreateListFromArrayLike在非對象 – EyedFox1

+0

上調用,你是否像這樣傳遞了你的名字'greet('James')'? –

+0

是的,我想爲它工作與數組,並沒有 – EyedFox1

0

您正將一個項目推入arrayNames中。它恰好是一個數組,但它是一個數組,因此arrayNames.length = 1。

0

錯誤是push用於將一個元素添加到數組。

您應該使用concat

arrayNames = arrayNames.concat(name) 

代替

arrayName.push(name) 
0

我更在C#世界不是JavaScript,但我想你已經有了一個 「類型」 的問題。你正在用一串字符串調用greet函數。當你將它推入你的arrayNames時,arrayNames就成爲一個字符串數組的數組 - 也就是說,arrayNames的每個元素本身就是一個字符串數組,並且只有其中一個,因爲你只調用一次greet。

相反,嘗試改變greet(["James", "Garry", "JOSHUA", "steven"])到這一點,它應該工作(注意,因爲他是第一個詹姆斯不會滿足,如果條件):

greet("James") 
greet("Garry") 
greet("JOSHUA") 
greet("steven") 

或者你可以讓幻想和對或的foreach做循環。