2016-11-15 62 views
-1

我有一個相當簡單的JavaScript對象,我需要通過使用其他已知屬性引用其中一個屬性。獲取與其他屬性匹配的屬性

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

所以使用上述作爲一個例子,我將有項目,顧問&下午,我需要返回筆記,鑑於組合。

+0

你想找到與PM匹配的json對象,然後獲取該對象的Notes部分? –

+0

所以我有一個像上面的例子中的JSON對象的數組。我正在循環訪問數組,對於每個索引我有PM,Consultant&Project,我需要獲取該組合的註釋。 – user1735894

+0

你是在談論JSON(文本)還是關於JavaScript對象?請閱讀'json'標籤的使用說明。 – trincot

回答

2

這假定您可以使用ES6 ARRAY.FIND 這是它的瀏覽器支持:

鉻:45.0
火狐(壁虎):25.0(25.0)
的Internet Explorer:不支持
邊緣:12
歌劇:32.0
Safari瀏覽器:7.1

所以我們可以說,我們知道PM,顧問,和項目中的對象可能持有像這樣:

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

,然後我們有這樣一個數組內的對象的列表:

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

我們是想告訴我們的工作是Find the object that matches my known object。而幸運的是,JavaScript數組的有find方法,我們可以在一個函數傳遞,就像這樣:

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

或者我們可以用一種叫every像這樣高階函數讓它一點點清潔:

// 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

請提及es6。 –

+0

@NinaScholz我不知道我使用ES6。我認爲Array#extras是ES5的一部分。根據[this](https://code.tutsplus.com/tutorials/what-they-didnt-tell-you-about-es5s-array-extras--net-28263)文章,他們是ES5規範。 –

相關問題