0

我有一个包含字典列表的字符串。我想通过检查他们的键而不是值来进行比较。有没有办法做到这一点。

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
}
}
4

1 回答 1

1

不要使用evalJSON.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);

将生成一个对象数组,每个对象都有一个名为group1or的属性group2。要清楚:

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

是一个Object literal,它与以下内容完全相同:

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

因此,如您所见,key任何地方都没有财产。

目前尚不清楚您要比较什么,还因为第三个对象似乎具有不同的属性名称。

更新:关于您的评论,这里的重点是没有“对象键”,只有对象的属性。这意味着,您需要提前知道“密钥”的名称才能使用它:

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

如果你想要一个key包含 value 的属性,那么"group1"你的对象需要不同:

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" 
于 2013-04-10T10:26:54.280 回答