2017-02-23 12 views
3

コンソールに大文字の要素を記録しようとしていますが、コンソールは毎回このエラーをスローします:TypeError:arrayNames [i] .toUpperCaseは関数ではありません配列内に大文字のログ要素をコンソールに入れる方法

あなたは、アレイ上の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


問題はラインです:

arrayNames.push(name); 

あなたは多次元配列を作成しています。

arrayNames = name; 

代わり
使用。

+0

私はむしろ '.concat'を使用することをお勧めします – Rajesh

1

あなたの代わりに、単純に同じ配列nameを指します。この

arrayNames = name

を行い、この

arrayNames.push(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関数を使用することができる方法はありますか?たとえば、greet( "James")は "Hello、James"を返し、greet(["James"、 "Julie"、 "BEN"])は名前の配列を返します – EyedFox1

+0

'arrayNames = name'は配列。それは単に渡されたものを参照します。したがって、関数 'name'と' arrayNames'の内部では同じです。 – RaR

+0

@RaRそれを指摘してくれてありがとう。 – vatz88

0

をあなたのコードに誤りがあり、あなたは別の配列に配列の名前を押しています。

この行 "arrayNames.push(name)"を "arrayNames = name;"に置き換えます。

関連する問題