如何使用下划线循环和数组

时间:2015-10-28 20:51:04

标签: javascript arrays underscore.js

我正在尝试使用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>');
});

这实际上有效,但我不明白为什么?!第一个参数是什么,无论我在那里写什么都没关系,它有效,我想知道如何做到这一点,以及为什么这种方式有效,谢谢。

3 个答案:

答案 0 :(得分:2)

根据documentation

  

每次调用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)

这将是一种相当典型的方式: -

&#13;
&#13;
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;
&#13;
&#13;

答案 2 :(得分:0)

每种方法都有语法......

_.each(list, callbackFunc);

其中callbackFunc具有语法...

function callbackFunc(element, index, list) {}

您的代码恰好起作用,因为您将名称值存储在names数组中,然后使用传递给回调函数的索引访问该数组。编写代码的更好方法是......

_(friends).each(function(friend){
  $('ul').append('<li>' + friend.name + '</li>');
});