2012-07-10 117 views
-1

有沒有辦法從其他財產JavaScript對象的屬性

例如(在SQL)的價值得到一個對象的屬性獲取ID對象其中object.name =「somename」?

我需要獲取該對象的ID,但我只知道名稱。

+0

該對象是否在列表中? – davids 2012-07-10 06:29:31

+0

該列表中的對象? – david 2012-07-10 06:29:59

+2

^有什麼可能。 – Daedalus 2012-07-10 06:32:49

回答

2

我會假設你正在嘗試用一組對象來做到這一點,因爲否則就沒有意義了。

根據您所需的瀏覽器支持,在Array.prototype上有一種稱爲filter的方法。如果需要的話,你也可以把它填滿。

的代碼最終會看起來像這樣:

var list = ​[ 
    {id:1, name:'bob'}, 
    {id:2, name:'jim'}, 
    {id:3, name:'sam'}, 
    {id:4, name:'tim'} 
]; 

var sams = list.filter(function(obj){ 
    return obj.name == 'sam'; 
}); 

console.log(sams[0].id); 

這裏是一個的jsfiddle鏈接:http://jsfiddle.net/g8rTA/

+0

我想我並不清楚,我試圖通過數組進行過濾。感謝您的幫助 – 2012-07-10 07:30:43

+0

+過濾器'方法,並提到它不支持無處不在:) – Jashwant 2012-07-10 07:56:15

0

你可以使用這個功能來得到它:

function getObjectByAttribute(list, attr, val){ 
    var result = null; 
    $.each(list, function(index, item){ 
     if(item[attr].toString() == val.toString()){ 
      result = item; 
      return false; 
     } 
    }); 
    return result; 
} 

var obj = getObjectByAttribute(yourList, 'name', 'somename'); 
if(obj) console.log(obj.id); 

編輯:

由於@nnnnnn建議,非jQuery的選擇:

function getObjectByAttribut(list, attr, val){ 
    var result = null; 
    for(var ind in list){ 
     if(list[ind][attr] == val) return list[ind]; 
    } 
    return null; 
} 
+0

或者,沒有jQuery,只需使用簡單的'for'循環而不是'$ .each )'。我可以建議你不需要'result'變量嗎?如果找到了,直接返回'item',如果沒有找到,直接返回'null'(或者甚至使用'undefined'作爲未找到的值,然後你甚至不需要最終的'return'語句)。 – nnnnnn 2012-07-10 06:37:12

+0

是的,你說得對,我應該考慮到這一點。關於返回錯誤的事情,您從jQuery .each循環中返回一個非錯誤,就像foor循環中的continue語句一樣,而返回false則循環被破壞。 – davids 2012-07-10 06:43:15

+0

我的歉意。在我看來,我已經跳到了非jQuery版本,但是''.each()'''''''''''''''''''''''''''' – nnnnnn 2012-07-10 06:45:35

0

你的問題我也不清楚,但我回答這條線。

有沒有辦法從另一個屬性的值中獲取一個對象屬性。

var obj = { 
    'name' : 'ramesh', 
    'surname' : 'suresh' 
} 

var obj2 = { 
    'props' : 'name', 
    'method' : 'blah' 
} 


for(var i in obj){ 
    if(obj.hasOwnProperty(i)){ 
     if(i === obj2['props']){ 
     console.log('Found ' + i); // This will find 'name' 
     break; 
     } 

    } 
} 
+0

一個更多-1在SO沒有評論:) – Jashwant 2012-07-10 07:06:58

+0

這是我,這是你的評論:你瘋了。 – david 2012-07-10 07:10:17

+0

;)哈哈。我喜歡你的評論。但嚴重的是,我希望得到更好的評論。這不是嘲笑某人的地方。指出錯誤,所以我可以學習。 – Jashwant 2012-07-10 07:11:10