2013-02-28 76 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,因为基准更快,并且库保持良好。