2017-02-23 176 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 с массивом и без? Например, приветствие («Джеймс») вернет «Привет, Джеймс» и приветствует ([«Джеймс», «Джулия», «BEN»]) вернет массивы имен – EyedFox1

+0

'arrayNames = name' не создаст другую копию массив. Он будет просто ссылаться на тот, который был принят. Таким образом, внутри функции 'name' и' arrayNames' совпадают. – RaR

+0

@RaR спасибо, что указал. – vatz88

0

Существует ошибка в коде, вы должны нажать на имя массива в другой массив.

Заменить эту строку "arrayNames.push (name)" на "arrayNames = name;"