2017-02-23 2 views
3

Ich versuche, das Großbuchstaben-Element an der Konsole zu protokollieren, aber die Konsole löst diesen Fehler jedes Mal aus: TypeError: arrayNames [i] .toUpperCase ist keine FunktionSo trösten Sie Log-Elemente mit Großbuchstaben in einem Array

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

Weil 'name' eine Zeichenkette sein sollte, aber wenn Sie die Funktion' greet' aufrufen, übergeben Sie ein Array. – nikhil

+1

Danke für die Korrektur @nikhil – EyedFox1

Antwort

1

Sie verwenden toUpperCase auf einem Array.
Das Problem ist die Zeile:

arrayNames.push(name); 

Sie ein mehrdimensionales Array zu erstellen.
Verwenden

arrayNames = name; 

statt.

+0

Ich würde eher vorschlagen '.concat' – Rajesh

1

Sie erstellen Array von Array dieses

arrayNames.push(name)

tun Statt diese

arrayNames = name

, die einfach auf das gleiche Array name beziehen.

toUpperCase() Funktion kann nur für eine Zeichenfolge und nicht für ein Array aufgerufen werden.

Siehe modifizierten Code unten:

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

Excellent vielen Dank. Gibt es eine Möglichkeit, die Greet-Funktion mit einem Array und ohne zu verwenden? Zum Beispiel würde greet ("James") "Hello, James" und greet (["James", "Julie", "BEN"]) zurückgeben Arrays von Namen – EyedFox1

+0

'arrayNames = name' wird keine weitere Kopie von erstellen das Array. Es bezieht sich nur auf den, der bestanden wurde. Die Funktion 'name' und' arrayNames' sind also gleich. – RaR

+0

@RaR Danke, dass du das unterstrichen hast. – vatz88

0

Es ist ein Fehler im Code, müssen Sie den Namen des Arrays in einem anderen Array schieben.

Ersetzen Sie diese Zeile "arrayNames.push (name)" durch "arrayNames = name;"

Verwandte Themen