2017-02-23 5 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' объединит 2 массива вместе, что' 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 Kumar. Это работает, однако, когда у меня есть только одно имя как аргумент без массива, он выдает ошибку TypeError: CreateListFromArrayLike вызывается на не-объект – EyedFox1

+0

, вы передаете свое имя, как это «привет» («Джеймс»)? –

+0

да, я бы хотел, чтобы он работал с массивом и без – EyedFox1

0

Вы нажимаете один элемент на имена массива. Это массив, но это ОДИН массив, поэтому arrayNames.length = 1.

0

Ошибка push использовать, чтобы добавить один элемент в массив.

Вы должны использовать concat

arrayNames = arrayNames.concat(name) 

вместо

arrayName.push(name) 
0

Я больше в C# мире, чем Javascript, но я думаю, что у вас есть это "типа" проблема. Вы вызываете функцию greet с массивом строк. Когда вы вставляете это в свои имена массивов, arrayNames становится массивом массива строк, то есть каждый элемент arrayNames сам по себе является массивом строк, и есть только один из них, потому что вы вызываете только приветствие один раз.

Вместо этого, попробуйте изменить greet(["James", "Garry", "JOSHUA", "steven"]) к этому, и он должен работать (отметив, что Джеймс не будет отвечать, если условие, так как он является первым):

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

Или вы могли бы получить фантазии и сделать для или Еогеасп петля.

Смежные вопросы