2010-05-30 66 views
0

我正在使用twitter annotations api的最新草稿。数据的例子有点貌似从JavaScript散列中获取密钥

status { 
    annotations : [ 
     {myAnnotationType:{myKey:myValue}}, 
     {someoneElsesAnnotationType:{theirKey:theirValue}}, 
    ] 
} 

现在我要检查状态,看它是否有与它myAnnotationType注解。如果注释是散列而不是数组,我只能写var ann = status.annotations.myAnnotationType。但它不是我写的这个:

function getKeys(obj){ 
    var keys = []; 
    for (key in obj) { 
     if (obj.hasOwnProperty(key)) { keys[keys.length] = key; } 
    } 
    return keys; 
} 
function getAnnotation(status, type){ 
    for(var i=0;i<status.annotations.length;i++){ 
     var keys = getKeys(status.annotations[i]); 
     for(var j=0;j<keys.length;j++){ 
      if(keys[j] == type){ 
       return status.annotations[i]; 
      } 
     } 
    } 
} 
var ann = getAnnotation(status, "myAnnotationType"); 

必须有更好的办法!在那儿?

PS我不能使用jquery或任何东西,因为这是JS在卡哈小部件使用和容器不支持外部库

回答

0

如果我正确理解该功能的目的,你想在一个数组中返回的第一个对象(status.annotations),其中包含一个键(type

function getAnnotation(status, type){ 
    for (var i=0; i<status.annotations.length ; i++) { 
    var obj = status.annotations[i]; 
    if (obj.hasOwnProperty(type)) return obj; 
    } 
} 
0

男人啊,jQuery的将使它容易,如果你可以肯定他们从来没有碰撞:

var annotations = $.extend.apply($, status['annotations'] || []); 
var annotation = annotations['myAnnotationType']; 

我想你可以写你自己的预算extend

function collapse(annotations) { 
    var result = {}; 
    for (var i = 0; i < annotations.length; i++) { 
    var annotation = annotations[i]; 
    for (var key in annotation) { 
     if (annotation.hasOwnProperty(key)) { 
     result[key] = annotation[key]; // Using a deep cloning function possible here 
     } 
    } 
    } 
    return result; 
} 

或者你也可以在适应jQuery的有黑客。