2016-08-17 4 views
3

私は実際にはJS配列ではなくオブジェクトでしか経験していないので、それらをナビゲートする方法を学ぼうとしています。2つのID変数の一致を見つけるためにオブジェクトを反復する

私は月(整数として表され、1-11)と、さまざまなIDのデータのコレクション(整数としても表現されています)を持っています。

に私が必要

var myData = { 
    1: {474: true, 459: true}, 
    4: {474: true, 578: true, 987: true, 459: true, 917: true, 296: true}, 
    5: {474: true, 578: true, 1036: true, 391: true, 987: true, 459: true, 917: true, 296: true} 
}; 

A)私に基づいて私のインデックスの最初のキーを見つけます、例えば474

データは、この(いくつかの長いデータのサブセット)のように見えます値。例えば、var month = 4;

b)はそのサブオブジェクトなどvar ID = 917

私がチェックするために必要なもののいくつかの例では、私のID値をtrueまたはfalseかどうかを探します。

month == 1場合とID == 459リターンtrue

場合month == 1およびID == 917返信false917は月のデータには存在しません1

month == 4ID == 987リターンtrue

month == 5場合とID == 917リターンtrue

month == 5場合とID == 100リターンfalse100ないmonth 5ためのデータ内に存在する)

場合、私はすべての月1-11であることを保護されていますデータに存在するので、私はかどうかを確認するために余分なチェックをする必要はありませんオブジェクトに値が存在します。 monthを使用して最初のキーを探し、そのサブオブジェクトでIDを検索し、見つかった場合はtrueを返します。

+1

''(MYDATA [月] [ID]){/ *何かをする* /}場合のために、この質問をチェックしてください - いいえ、反復または必要に応じて検索するだけで直接プロパティをテストします。 – nnnnnn

+0

''ちょうど最初の鍵を見つける必要があります。 ''我々が学習について話しているならば、正確にここにあるように、 ''月 'である一つの鍵しか存在できません。質問に限り、それらにアクセスして、「未定義」の値に対して安全を守れば、あなたは行けます。 – Dellirium

答えて

2

あなたはすでに{ }構文はJavaScriptでオブジェクトを定義知っていたかもしれませんが。

オブジェクトは常にキーと値のペアで構成され、キーは一意の値でなければならず、値は何でもかまいません。例えば。別のオブジェクト、数字。キーによるオブジェクトの値にアクセスするには

あなたは一般的に、これは、ネストされたオブジェクト{474: true, 578: true, 1036: true, 391: true, 987: true, 459: true, 917: true, 296: true}

あなたを返すでしょう。しかし、あなたが先に欲しいものを先制できる場合にのみ、インスタンスキー1からのために、ドット表記を使用myData.5を行いますオブジェクト。特定のシナリオでは、アクセスするキーがわからない場合があります。例えば。いくつかのデータ処理の後、アルゴリズムはキー3から、そして時にはキー1から値にアクセスしている可能性があります。その場合、myData["5"]を実行します。 "5"文字列の値は通常は変数になります。これは、変数の値に基づいてキーに動的にアクセスできるようにするためです。

あなたの場合、あなたが特定の月のキーが存在するかどうかをチェックしたいだけなら、それだけです。

myData[month][ID]このチェックでtrueが返された場合、その月にそのキーがあることがわかります。そうでなければFalse。

var myData = { 
 
    1: {474: true, 459: true}, 
 
    4: {474: true, 578: true, 987: true, 459: true, 917: true, 296: true}, 
 
    5: {474: true, 578: true, 1036: true, 391: true, 987: true, 459: true, 917: true, 296: true} 
 
}; 
 

 
if (myData[1][474]) { 
 
    console.log("key 474 exists in month 1."); 
 
} 
 
if (myData[1][974]) { 
 
    console.log("key 974 exists in month 1."); 
 
} 
 
else { 
 
    console.log("Key 974 doesn't exists for month 1."); 
 
}

+0

@ user1486133うまくいけば、オブジェクトの説明が役に立ちます。 –

+0

これは最も実行可能な答えです – Dellirium

+0

補足ありがとう= o –

2

それは偽、真の中に未定義になりますように、あなただけの

!!myData[month][ID] 

を行うことができますが、真滞在する

+0

これは正しい答えですが、彼女が真実/偽以外の何かを探していたら、これはうまくいかず、問題の始まりは「私はオブジェクトの仕組みを学びたいと思っています」と私はこれがそれを適切に処理する方法。 – Dellirium

2

あなたがチェックを使用してブールに結果をキャストすることができます。

function check(month, id) { 
 
    return !!(myData[month] && myData[month][id]); 
 
} 
 

 
var myData = { 1: { 474: true, 459: true }, 4: { 474: true, 578: true, 987: true, 459: true, 917: true, 296: true }, 5: { 474: true, 578: true, 1036: true, 391: true, 987: true, 459: true, 917: true, 296: true } }; 
 

 
console.log(check(1, 459)); // true 
 
console.log(check(1, 917)); // false (917 not present in data for month 1 
 
console.log(check(4, 987)); // true 
 
console.log(check(5, 917)); // true 
 
console.log(check(5, 100)); // false (100 not present in data for month 5) 
 
console.log(check(0, 100)); // false (no data present for month 0)

0

入力データ:

var myData = { 
    1: {474: true, 459: true}, 
    4: {474: true, 578: true, 987: true, 459: true, 917: true, 296: true}, 
    5: {474: true, 578: true, 1036: true, 391: true, 987: true, 459: true, 917: true, 296: true} 
}; 

a)は私の月の値に基づいて、私のインデックスの最初のキーを見つけます。例:var 月= 4;

あなたは、単にこれを行うだろう
  • myData["4"]、 これは{474: true, 578: true, 987: true, 459: true, 917: true, 296: true}

  • このvar subObject = myData["4"];

Bのように、変数にこれを取ることができます返されます)かどうかを探しますそのサブオブジェクトのID値の真または偽 var ID = 917

  • あなたは再び同じことを行うことができ、subObject["917"]、 これはtrueを返します。

  • subObjectにIDがない場合は、undefinedが返されます。

  • 戻り値はtrue, false or undefinedになる可能性があります。

  • これも変数で取ると、var value = subObject["917"]です。 常にブール値を取得するには、!!valueのように二重否定を使用できます。真は、要するにtrue

のままながら、これはDaveが示唆したように、我々は変数を取り除くと!!myData[month][ID]ように1行でそれを書くことができ、undefined, null, false and empty stringfalseとして返されるようになります。

myData[month]undefinedの場合、myData[month][ID]はエラーが発生するため、if条件でチェックするのが常に賢明です。詳細Checking if a key exists in a JavaScript object?

if(("4" in myData) && ("917" in myData["4"])){ 
    return myData["4"]["917"]; 
} 
関連する問題