2016-11-15 8 views
-1

私はかなり単純なJavaScriptオブジェクトを持っています。他の既知のプロパティを使用してプロパティの1つを参照する必要があります。だから、例として、上記を使用して他のプロパティと一致するプロパティを取得する

{ 
"PM":"Joe Smith", 
"Consultant":"[email protected]", 
"Project":"ContainerStore", 
"Notes":"This is my awesome note" 
} 

、私はプロジェクト、コンサルタント& PMを持っていますし、私はその与えられた組み合わせのためのノートを返す必要があります。

+0

PMと一致するjsonオブジェクトを探して、そのオブジェクトのNotes部分を取得しますか? –

+0

私は上記の例のようにJSONオブジェクトの配列を持っています。私は配列をループしています。それぞれのインデックスについて、私はPM、コンサルタント&プロジェクトがあります。私はその組み合わせのノートを取得する必要があります。 – user1735894

+0

JSON(テキスト)やJavaScriptオブジェクトについて話していますか? 'json'タグの使い方の説明を読んでください。 – trincot

答えて

2

これはあなたがこれはそれのためのブラウザのサポートであるES6 ARRAY.FINDに を使用することができることを前提としています

クローム:45.0
のFirefox(Geckoの):25.0(25.0)
のInternet Explorer:いいえサポート
エッジ:12
オペラ:32.0
サファリ:7.1

それでは、私たちはPM、コンサルタントを知っているとしましょう、と多分そのようなオブジェクトで開催されたプロジェクト、:

var known = { 
    "PM": "John Smith", 
    "Consultant": "Jim Bob", 
    "Project": "Awesome Project" 
} 

し、我々はそうのような配列の内部オブジェクトのリストを持っている:私たちは私たちの作業がFind the object that matches my known objectで伝えたいと思っている何

var listOfProjects = [ {....}...] 

var foundProject = listOfProjects.find(function(project){ 
return project["PM"] === known["PM"] && 
     project["Consultant"] === known["Consultant"] && 
     project["Project"] === known["Project"] 
}) 

するか、私たちはそうのようなeveryと呼ばれる別の高階関数でそれを少しクリーナーを行うことができます。そして、幸いにも私たちのためには、JavaScriptの配列のは、私たちがそうのように、機能に渡すことができますfind方法を、持っています:私たちは「注意事項」キーを望んでいたので、もし

// Loop through the listOfProjects and return the first one that 
// returns true 
var foundProject = listOfProjects.find(function(project){ 
     // Loop through all of the keys inside of our known object 
     // and return true or false if every single one matches 
     // the given condidtion 
    return Object.keys(known).every(function(knownKey){ 
      // use the key to see if known at knownKey is equal to 
      // what you find inside of project at the same key 
      return known[knownKey] === project[knownKey] 
     }) 
    }) 

いずれかの方法で、foundProjectは、実際のプロジェクトの対象となり、我々はその後行うことができます。

var notesForFoundProject = foundProject["Notes"] 

場合Array.findを使用することはできません。以下は同じように動作します。

var known = {...} 
var listOfProjects = [...] 
var found; 
for(var i = 0; i < listOfProjects.length; i++){ 
    var current = listOfProjects[i] 
    if(current["PM"] === known["PM"] && 
      current["Consultant"] === known["Consultant"] && 
      current["Project"] === known["Project"]){ 
    found = current; 
    break; 
    } 
} 

var notes = found["Notes"] || false 
+1

これはきちんとしています.... – Thalaivar

+0

お願いします。 –

+0

@NinaScholz私はES6を使ったことは知らなかった。私はArray#エクストラはES5の一部だと思った。 [this](https://code.tutsplus.com/tutorials/what-they-didnt-tell-you-about-es5s-array-extras--net-28263)記事によると、彼らはES5仕様です。 –

関連する問題