2017-02-23 44 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做循环。