2013-04-10 77 views
0

我有一個包含字典列表的字符串。 我想通過檢查它們的鍵值來進行比較。有沒有辦法做到這一點。比較eval和字典列表的關鍵字

data = '[{ "group1" : "T1"}, { "group1" : "T2"}, { "group2" : "T3"}]'; 

我怎樣才能比較這些字典的基礎上他們的鑰匙。例如,我已經使用:

dataObj = eval(data); //generate 3 objects for data. 

這裏dataObj[0]將引用的{ "group1" : "T1"} 對象做到這一點我做了下面的代碼:

for(i=0;i<dataObj.length;i++){ 
if (dataObj[i].key == dataObj[i].key){   //<-- i am not getting what to do to compare their keys i.e. "group1" and "group1" 
//my other statements 
} 
} 
+0

那不是對象的方式工作。請查看MDN JavaScript指南:https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Working_with_Objects。相關:http://stackoverflow.com/q/11922383/218196。 – 2013-04-10 10:01:11

+2

那麼你是否試圖查看一個對象的鍵是否與另一個對象的鍵相同? – 2013-04-10 10:01:52

+0

是@Qantas 94重磅。有沒有辦法做到這一點。我是新來的JavaScript。需要對此做出很好的澄清。 – star 2013-04-10 10:05:14

回答

1

不要使用eval但JSON.parse(https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/JSON/parse )代替。如果它在一些舊瀏覽器中不可用,那麼有很多實現不易受到攻擊,而不僅僅是eval

話說,有:

var data = '[{ "group1" : "T1"}, { "group1" : "T2"}, { "group2" : "T3"}]'; 
var array = JSON.parse(data); 

會生成對象的數組,他們每個人都有一個自己的財產叫group1group2。需要明確的是:

var myobj = {"group1" : "T1"} 

是一個Object literal,這是完全一樣的:

var myobj = new Object(); 
myobj.group1 = "T1"; 

所以,你可以看到,沒有key財產的任何地方。

不清楚你想要比較什麼,也因爲第三個對象似乎有不同的屬性名稱。

更新: 關於你的評論,這裏的關鍵是,沒有「對象鍵」,但只是對象的屬性。這意味着,你需要預先知道的「鑰匙」的名義,以使用它:如果你想有一個包含價值"group1"一個key性能

array[0].group1 === array[1].group1 // false, one is "T1", one is "T2" 

,比你的對象必須是不同的:

var data = '[{"key" : "group1", "value": "T1"}, {"key": "group1", "value" : "T2"}, { "key" : "group2", "value" : "T3"}]' 

然後,你可以有:

var array = JSON.parse(data); 

array[0].key === array[1].key // true, both are "group1" 
array[0].value === array[1].value // false, one is "T1", one is "T2" 
+0

感謝您的建議。這裏我想檢查一個對象的鍵是否與另一個對象的鍵相同。所以我可以根據它使用它的值,即T1和T2。 – star 2013-04-10 10:32:32