2017-04-23 16 views
2

"getAllKeys"という関数を作成し、すべての入力オブジェクトのキーの配列を返します。console.logに "Undefined"エラーが表示される

例入力:

{ 
    name : 'Sam', 
    age : 25, 
    hasPets : true 
} 

関数の戻り値(出力):

['name', 'age', 'hasPets'] 

このプロンプトを解決するために、 "Object.keys" を使用しないでください。

私の解決策は以下の通りです。

function getAllKeys(obj) { 
    var arrayToPrint = []; 
    for (var key in obj) { 
    arrayToPrint.push(key); 
    } 
    console.log(arrayToPrint); 
} 

obj1 = { 
    name : 'Sam', 
    age : 25, 
    hasPets : true 
}; 

getAllKeys(obj1); 

コンソール出力:

enter image description here

誰かが説明していただけます、なぜ私はこの未定義を取得していますか?

+1

を記録することができます。 – zerkms

+1

コンソールでこのコードを実行すると、最終的な出力は 'getAllKeys(obj1);'の結果です - 'undefined'です - あなたの関数は何も返しません。エラー** –

+0

しかし、コンソールにロギングするのではなく、あなたの 'getAllKeys'関数を** SHOULD **配列を返すようにして、関数がすべて役に立つようにしてください。 –

答えて

1

これは、関数が何も返さないためです。明示的に値を返さない場合、関数はundefinedを返します。

あなたは関数からarrayToPrintを返し、あなたは `何かをreturn`ませんgetAllKeys(obj1)

function getAllKeys(obj) { 
    var arrayToPrint = []; 
    for (var key in obj) { 
    arrayToPrint.push(key); 
    } 
    return arrayToPrint; // changed here 
} 

obj1 = { 
    name : 'Sam', 
    age : 25, 
    hasPets : true 
}; 

console.log(getAllKeys(obj1)); // changed here 

DEMO

+1

これは間違いありませんが、それらの混乱は、関数の出力を記録しません。そのコンソールはそれ自体をしています。それらの既存の関数は配列を返す必要はありませんが、それでも動作し、コンソールの未定義は無視されます –

+0

コンソールで実行されている場合(これはOPがコードで行っているものです)、コンソール!実際には、OPコードをjsfiddleに入れた場合、コードに 'undefined'も渡されません。つまり、関数が何も返さないため、" undefined "はそうではありません。なぜなら、" undefined "それは開発者用ツールコンソールがどのように動作するかです。*これは、* getAllKeys関数をどのように書いて*有用なものにする必要があるかという事実を取り除きますが、* –

+0

に感謝します。 –

関連する問題