一起使用 .map(.range(1)) 的目的是什么?范围始终返回 [0]

What is the purpose of using .map(.range(1)) together? range always returns [0]?

本文关键字:范围 返回 map range 一起 是什么      更新时间:2023-09-26

关于此输出的简单问题 var newVal = _.range(1); console.log(newVal); [0]

var STARTING_NUMBER = 1;
var _names = ["Lorem", "ipsum", "dolor", "sit", "amet", "consectetur", "adipisicing", "elit"];
var _bgcolors = ["#FC9D9A", "#F9CDAD", "#C8C8A9"];
var _colors = ["#FE4365", "#83AF9B"]
var _generateItem = function(){
  return {
    id: Math.random(),
    name: _.sample(_names),
    bgcolor: _.sample(_bgcolors),
    color: _.sample(_colors),
    opacity: new Transitionable(0),
    transX: new Transitionable(-_width)
  }
}
//why is _.range needed? why just make STARTING_NUMBER = [0];
$scope.items = _.map(_.range(STARTING_NUMBER), function(){
      return _generateItem();
    })

setInterval(function(){
  $scope.add();
  if(!$scope.$$phase)
    $scope.$apply();
}, 1000)

range 函数在传递单个值时将返回一个整数数组:

e.g. _.range(1) returns [0],   
     _.range(2) returns [0, 1]

代码所做的是在 STARTING_NUMBER 为 1 时调用 generateItem 一次,如果 STARTING_NUMBER 为 2 则调用两次,依此类推,并将 generateItem 的输出添加到数组中。

它可以更简洁地编码为:

$scope.items = _.times(STARTING_NUMBER, generateItem);

这样做是为了保持逻辑通用。代码试图做的是生成一些项目(返回值的函数)并将它们存储在长度STARTING_NUMBER数组中。所以你的假设是正确的,如果STARTING_NUMBER只有 1 个值,即 1 ,但在这里它可以保持动态,即 1 或 2 或 10 ...,并且 $scope.items 数组将是一个生成的等于该长度的数组。

这是一个使用更改值的演示,STARTING_NUMBER = 10(依赖项已注释掉)

演示 : http://jsfiddle.net/m02h0n3g/1/

var $scope = {};
var STARTING_NUMBER = 10;
var _names = ["Lorem", "ipsum", "dolor", "sit", "amet", "consectetur", "adipisicing", "elit"];
var _bgcolors = ["#FC9D9A", "#F9CDAD", "#C8C8A9"];
var _colors = ["#FE4365", "#83AF9B"]
var _generateItem = function(){
  return {
    id: Math.random(),
    name: _.sample(_names),
    bgcolor: _.sample(_bgcolors),
    color: _.sample(_colors),
   // opacity: new Transitionable(0),
  //  transX: new Transitionable(-_width)
  }
}
//why is _.range needed? why just make STARTING_NUMBER = [0];
$scope.items = _.map(_.range(STARTING_NUMBER), function(){
      return _generateItem();
    })
console.log($scope.items);