2013-02-28 117 views
1

我有對象的JavaScript數組,看起來像這樣:拼合對象的JavaScript數組與underscore.js

"partners":[{"username":"fangonk","profileImg":"fangonk.jpg"}, 
      {"username":"jane","profileImg":"jane.jpg"}, 
      {"username":"tom_jones","profileImg":"tom.jpg"}] 

我想輸出使用下劃線庫中的每個陣列的鍵值。因此,對於每一個對象,我想輸出的東西,看起來像這樣:

<h1>Username Value</h1><img src="profileImg Value here" /> 
+1

Ooops - 疲倦的大腦。固定。 – Thomas 2013-02-28 17:17:00

+1

結果數組應該是什麼樣子? – 2013-02-28 17:18:27

+1

使用'.map()'函數,通常你會讓回調函數返回一個值,然後存儲'.map()'調用的返回值,這將是你函數返回的新數組。 – 2013-02-28 17:18:58

回答

1

有點困惑你的「源」,但我覺得你只是想做到這一點:

_.each(partners, function(p) { document.write('<h1>' + p.username + '</h1>\ 
    <img src="' + p.profileImg + '" alt="' + p.username + '" />'); } 
//substitute some DOM method (e.g. jquery().append) for document.write 

這是你要找的結果嗎?

這將只適用,如果你的源看起來更像是:

var partners = [{"username":"fangonk","profileImg":"fangonk.jpg"}, 
       {"username":"jane","profileImg":"jane.jpg"}, 
       {"username":"tom_jones","profileImg":"tom.jpg"}]; 

編輯:

var someBiggerObject = { 
    partners: [ 
    {"username":"fangonk","profileImg":"fangonk.jpg"}, 
    {"username":"jane","profileImg":"jane.jpg"}, 
    {"username":"tom_jones","profileImg":"tom.jpg"} 
    ] 
}; 

_.each(someBiggerObject.partners, function(p) { document.write('<h1>' + p.username + '</h1>\ 
    <img src="' + p.profileImg + '" alt="' + p.username + '" />'); } 
//substitute some DOM method (e.g. jquery().append) for document.write 
+0

夥伴數組是更大的JSON對象中的一個屬性,因此重構它可能很困難。無論如何要完成我正在尋找的東西?有沒有辦法用下劃線重組? – Thomas 2013-02-28 17:31:08

+0

@thomas:參見編輯 – BLSully 2013-02-28 17:33:23

0

做到這一點,正確的方法是_.template

Example

如果你的結構是這樣的:

var list = {"partners":[ 
    {"username":"fangonk","profileImg":"fangonk.jpg"}, 
    {"username":"jane","profileImg":"jane.jpg"}, 
    {"username":"tom_jones","profileImg":"tom.jpg"} 
]}; 

您可以創建重複的項目模板(注意:type="text/html"

<script type="text/html" id="userItemTemplate"> 
    <h1><%= username %></h1><img src='<%= profileImg %>' /> 
</script> 

,並把每一個項目到模板通過環路

var uIT = $("#userItemTemplate").html(); 
_.each(list.partners,function(user){ 
    $("#target").append(_.template(uIT,user));   
}); 

OR

放循環插入你的模板

<script type="text/html" id="userTemplate"> 
    <% _.each(partners,function(user,key,list){ %> 
    <h1><%= user.username %></h1><img src='<%= user.profileImg %>' /> 
    <% }); %> 
</script> 

然後向裏推

var uT = $("#userTemplate").html(); 
$("#target2").html(_.template(uT,list)); 

請注意,我用下劃線代替lodash全陣列。它大部分是兼容的,但我更喜歡lodash,因爲基準更快,並且庫保持良好。