我正在尝试使用Underscore循环一个数组,我有这个:
var friends = [
{
name: 'Jimmy',
age: 21
},
{
name: 'Anna',
age: 19
},
{
name: 'Alina',
age: '22'
},
{
name: 'Carl',
age: '22'
}
];
var names = _(friends).pluck('name');
for(i = 0; i < friends.length; i++){
$('ul').append('<li>' + names[i] + '</li>');
}
<script src="http://underscorejs.org/underscore-min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<ul></ul>
我正在尝试使用下划线的每种方法做同样的事情,但我无法实现它,我正在尝试做这样的事情:
_(friends).each(function(namessss, i){
$('ul').append('<li>' + names[i] + '</li>');
});
这实际上有效,但我不明白为什么?!第一个参数是什么,无论我在那里写什么都没关系,它有效,我想知道如何做到这一点,以及为什么这种方式有效,谢谢。
答案 0 :(得分:2)
每次调用iteratee时都会调用三个参数:(element,index,list)。如果list是JavaScript对象,则iteratee的参数将是(value,key,list)
无论你为第一个参数写什么,你的代码都能正常工作,因为你从未真正使用过该参数(值本身)。相反,您只需引用您在此循环之外定义的 JOptionPane.showMessageDialog(null, "You win a discount coupon of $" + String.format("%.2f", (groceriesCost*tier1)) +
". (8% of your purchase.)");
数组的索引。
如果您想真正使用names
循环中的值,可以使用以下内容:
each
答案 1 :(得分:1)
这将是一种相当典型的方式: -
var friends = [
{
name: 'Jimmy',
age: 21
},
{
name: 'Anna',
age: 19
},
{
name: 'Alina',
age: '22'
},
{
name: 'Carl',
age: '22'
}
];
var names = _(friends).pluck('name');
_.each(names, function(name){
$('ul').append('<li>' + name + '</li>');
});
&#13;
<script src="http://underscorejs.org/underscore-min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<ul></ul>
&#13;
答案 2 :(得分:0)
每种方法都有语法......
_.each(list, callbackFunc);
其中callbackFunc具有语法...
function callbackFunc(element, index, list) {}
您的代码恰好起作用,因为您将名称值存储在names数组中,然后使用传递给回调函数的索引访问该数组。编写代码的更好方法是......
_(friends).each(function(friend){
$('ul').append('<li>' + friend.name + '</li>');
});