2016-04-05 7 views
0

私が持っている物と一致した場合:チェックObject.keyは、()変数

messages = { 
    V1: { 
     summary: "summary one", 
     cause: "cause one", 
     code: "1" 
}, 
    V2: { 
     summary: "summary two", 
     cause: "cause two, 
     code: "2" 
} 

は、私は、オブジェクトメッセージのキーに私のevent.detailsの値を比較し、要約のための変数を設定すると、原因、および一致するキーのコード。

私の実装は、これまで

if (event.details === Object.keys(messages)) { 
    var a = the summary of the matching key; 
    var b = the cause of the matching key; 
    var c = the code for the matching key; 
}; 

その後、私は私のコードでこれらのvariblesを使用.... 現時点では私の結果は次のとおりです。

event.details = "V1" 
Object.Keys(messages) = ["V1","V2"] 

しかし、これはちょうど私の配列を与えますキーの私は今マッチングキーの情報を取得したい。

キーがevent.detailsと一致するかどうかを確認するにはどうすればよいですか?キーの概要、原因、コードに変数を設定する方法は?

+0

原因「最後に」 – JordanHendrix

+0

* Object.keys *はObjectであるArrayを返します。そのため、オブジェクト自体は '==='になります。 – RobG

答えて

4

アクセス:var message = messages[event.details]messageがオブジェクト(ないundefined)であれば、それは存在しますがmessage.summaryなどにアクセスすることができます。

if (message) { 
    // message.summary 
    // message.cause 
    // ... 
} 
0

フェリックスが言うように、あなたが通常行うことができますかなり安全に

var message = messages[event.details] 

。しかし、一般的な解決策(event.detailsは任意の値を返す可能性があります)の場合は、event.detailsが継承されたプロパティではなく、独自のプロパティであることを確認するか、またはメッセージ継承されたプロパティを持つ

function extend(toObj, fromObj) { 
    Object.keys(fromObj).forEach(function(prop) { 
    toObj[prop] = fromObj[prop]; 
    }); 
    return toObj; 
} 

次に、あなたが行うことができます。少し不器用なので、それはそうもうただのコピー1つのオブジェクトの独自のプロパティは、機能を拡張する簡単なの活用だ

var messages = Object.create(null); 
messages['V1'] = { 
    summary: "summary one", 
    cause: "cause one", 
    code: "1" 
}; 
messages['V2'] = { 
    summary: "summary two", 
    cause: "cause two", 
    code: "2" 
}; 

var messages = extend(Object.create(null), { 
    V1: {summary: "summary one", 
     cause: "cause one", 
     code: "1" 
    }, 
    V2: {summary: "summary two", 
     cause: "cause two", 
     code: "2" 
    } 
}); 

となりました。これで、プロパティ名に関係なく予期しないプロパティがメッセージに含まれることがあります。 拡張関数には、ディープコピーを行うための「深い」フラグを含めることができますが、それは他のすべてのストーリーです(すでにたくさんの質問と回答があります)。

関連する問題