2013-06-22 65 views
1

有沒有辦法說類似有沒有辦法說收集[attr1 = value] .attr2 =在Javascript中的值?

User.friends[id=1].posts=data 
在Javascript

,其中User.friends是朋友項目的集合,其屬性之一是「ID」?

我正在遍歷集合User.friends,它是具有3個屬性(id,posts和likes)的Friend對象的集合。內層迭代器實例變量friend,似乎不是通過引用傳遞的;那麼,我如何在迭代器中優雅地設置父對象的屬性呢?

async.each(User.friends, function(friend, cb) { 
      var url="https://graph.facebook.com/"+friend.id.id+"/?fields=posts&since="+ moment(postFromDate).format('YYYY-MM-DD') + '&access_token=' + User.accessToken; 
      request.get({ 
       url: url, 
       json: true 
       }, function (error, response, body) { 
        if (!error && response.statusCode == 200) { 
         console.log(body); 
         //I WANT TO SET THE ACTUAL User.friend[i].posts value, 
         //but I do not know how to get the value of 'i'? 
         friend.posts=body.data; //this just sets local friend var       
         cb(null); 
        } else { 
         console.log(error); 
         throw error; 
        } 

      }); //...request.get 
      }, function(error, result) { 
       callback(); 
     }); //...async_each 

對不起,如果這是一個愚蠢的問題。任何幫助真的很感激。我試過了:

_.findWhere(User.friends,{id: friend.id}).posts=body.data; 

但這似乎不工作(我認爲它只是設置一個本地值)。

回答

2

你可以使用filter方法:

var result = User.friends.filter(function(item) { return item.id === 1; })[0].posts = data; 
+0

這似乎返回對象的一個​​副本 - 但是如果我設置result.post,收集User.friends不受影響。有沒有辦法獲得匹配屬性的索引,所以我可以直接設置集合?例如User.friend [i] .post = xxx其中,我等於User.friends [id = 1]的索引 – metalaureate

+0

不,它返回存儲實際對象的數組。我第一次忘了'[0]'。但是現在,你應該能夠操縱你的實際對象。看到這個小提琴:http://jsfiddle.net/wRV3L/你可以通過在'User.friends.indexOf()'包裝這個函數得到索引,但也許有一個更好的方式獲得索引...我' m不知道 – basilikum

+0

我謙卑的道歉 - 這是一個錯誤的右側任務。這種方法很好用!謝謝! – metalaureate

相關問題