2010-05-30 104 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的有黑客。