2016-10-28 5 views
0

私の質問は、この関数が、それがshould return the element at the index of the array at the key of the passed in objectというテストに合格しない理由です。配列の要素をオブジェクトのプロパティとして取得するには

問題がある:オブジェクト、キー、及び数値指標が与えられる

、「getElementOfArrayProperty」は、所与のキーで指定されたオブジェクト内に配置された配列の指定されたインデックスの要素の値を返します。

注: *配列が空の場合は、undefinedを返す必要があります。

  • 指定されたインデックスに指定されたキーにある配列の範囲外の場合は、undefinedを返す必要があります。
  • 指定されたキーのプロパティが配列でない場合は、undefinedを返す必要があります。
  • キーにプロパティがない場合は、undefinedを返す必要があります。

サンプルオブジェクトを渡した場合、var obj = { key: ['Jamil', 'Albrey'] };"jamil"を返します。

マイコード:

 function getElementOfArrayProperty(obj, key, index) { 

    if (!obj["key"]) return undefined 
     return obj["key"][index] 
    } 

    getElementOfArrayProperty(obj, "key", 0) // returns "jamil" 

しかし、それはまだ

+0

あなたの例は、あなたが引数 'key'に選択した値が文字列' 'key" 'であるために機能します。 – bobince

+0

私は知っている、私は挑戦(学習)している、それは私に与えるものです。 「キー」が引用符で囲まれていないと、どうすればいいでしょうか。しかし、これはまだその要件を通過するべきではない?私はそれを実行するときに "ジャミル"を取得しています。 – sopstem2428

答えて

0

が、私は、これはタイプミスですが、あなたのコード例では、あなたが文字列「キー」に渡しているかどうかわからないんだけど、テストを失敗しましたメソッド定義のパラメータkeyを使用する代わりに、obj["key"]のようにobjに設定します。 obj[key]を使用すると、結果が向上する可能性があります。

ここに私が何を意味するのかです:

var obj = { 
 
    key: ['Jamil', 'Albrey'] 
 
    }; 
 

 
    function getElementOfArrayProperty(obj, key, index) { 
 

 
    if (!obj[key]) { 
 
     \t \t return undefined; 
 
     } 
 
    return obj[key][index]; 
 
    } 
 

 
    function getArrayByKey(obj, key) { 
 
     return obj[key]; 
 
    } 
 

 
    alert(getElementOfArrayProperty(obj, "key", 0) + "\n" + getArrayByKey(obj, "key"));

あなたはそれを実行した場合、これは未定義返さないことがわかります、代わりにそれはハードでちょうどあなたの例のようにジャミルを返します。 "key"をコードしています。

私がちょうどobj[key]を探しても、私はまだ全体の配列オブジェクトを取得することになりますので、問題を再現できないようです。

+0

obj [key](引用符なし)を返すと、 'for(objのvarキー)'を使用しても、キーは未定義です@Nol – sopstem2428

1

私はノルが正しいと思います。問題は、プロパティ/パラメータとしてkeyと少し混乱があり、文字列リテラルとして "キー"があることです。 EDIT

var obj = { foo: ['Jamil', 'Albrey'] }; 
 

 
function getElementOfArrayProperty(obj, key, index) { 
 
    if (!obj[key]) return undefined; 
 
    return obj[key][index]; 
 
} 
 
    
 
alert(getElementOfArrayProperty(obj, "foo", 0));

::これは物事をクリアした場合を見てみましょうと"foo"は引用符の間に、それは変数ではないので、それはだ、それは文字列リテラルですなぜあなたは不思議に思っている場合オブジェクトのプロパティの名前で置き換えます。

var bar = obj["foo"]; // or 
var bar = obj.foo; 

そして、あなたが関数呼び出しでそれを使用することができます:

alert(getElementOfArrayProperty(obj, bar, 0)); 

しかし、この場合には、あなたは、パラメータとして変数を渡したい場合は、まずあなたは次のように、それを作成する必要があります

var obj = { foo: ['Jamil', 'Albrey'] }; 
 
var bar = obj.foo; 
 

 
function getElementOfArrayProperty(key, index) { 
 
    if (!key) return undefined; 
 
    return key[index]; 
 
} 
 

 
alert(getElementOfArrayProperty(bar, 0));
barはすでにobjオブジェクトの1つのプロパティを参照するため、obj変数を渡す必要はありません

+0

私はそれを理解しています。私は私の関数内で引用符で囲んでいないときにキーが返された理由は不明です。 btwコメントでコードスニペットを実行するにはどうすればよいですか? – sopstem2428

+0

コメントは、私が知る限り、スニペットをサポートしていません。 (コードを強調表示することを意味するならば、それをバックティックの間で囲む必要があります)そして、私のスニペットでは、変数 'key'は引用符をつけていません...または' 'foo ''の引用符'getElementOfArrayProperty'呼び出しですか? – David

関連する問題