【问题标题】:Replace JavaScript for loop with _.each() function用 _.each() 函数替换 JavaScript for 循环
【发布时间】:2015-04-08 01:09:26
【问题描述】:

我正在尝试用 underscore.js each() 函数替换 JavaScript For Loop。

for (var x = 0; x < count; x++) {
  slider[x].setAttribute('id', arguments[x]);
  sliderPagination[x].setAttribute('id', arguments[x]+'Pagination');

  // Initialise swiper
  var slider = new Slider('#'+arguments[x], {
    pagination: '#'+arguments[x]+'Pagination',
    loop:true,
    grabCursor: true,
    paginationClickable: true
  })
}

我不熟悉使用下划线,所以不太确定最好的方法。使用_.each() 函数时是否需要索引迭代?

更新:

// Function to initialize multiple instances of slider plugin
function loadSliders(values) {

  var sliders = document.getElementsByClassName("swiper-container"),
      slidersPaginations = document.getElementsByClassName("swiper-pagination"),
      count = Math.min(sliders.length, arguments.length),
      i = 0;

  _.each(sliders, function(sliders, index) {
    var argumentsVariable = values[index];

    sliders.setAttribute('id', argumentsVariable);
    slidersPaginations[index].setAttribute('id', argumentsVariable+'Pagination');

    // Initialise swiper
    var slider = new Swiper('#'+argumentsVariable, {
      pagination: '#'+argumentsVariable+'Pagination',
      loop:true,
      grabCursor: true,
      paginationClickable: true
    })

  });

}

【问题讨论】:

  • 每个都是为了迭代,这看起来更像是一个案例。

标签: javascript for-loop underscore.js each


【解决方案1】:

我在这里假设您有 3 个数组: - sliders - sliderPaginations - arguments

那么,你可以这样做:

_.each(sliders, function(slider, index) {
  var argumentsVariable = arguments[index];
  slider.setAttribute('id', argumentsVariable);
  sliderPaginations[index].setAttribute('id', argumentsVariable+'Pagination');

  // Initialise swiper
  var slider = new Slider('#'+argumentsVariable, {
    pagination: '#'+argumentsVariable+'Pagination',
    loop:true,
    grabCursor: true,
    paginationClickable: true
  })
}

请注意,您可以使用为每个数组定义的 EcmaScript5 forEach 方法:

sliders.forEach(function(slider, index) {
  var argumentsVariable = arguments[index];
  slider.setAttribute('id', argumentsVariable);
  sliderPagination.setAttribute('id', argumentsVariable+'Pagination');

  // Initialise swiper
  var slider = new Slider('#'+argumentsVariable, {
    pagination: '#'+argumentsVariable+'Pagination',
    loop:true,
    grabCursor: true,
    paginationClickable: true
  })
}

【讨论】:

  • 有趣的是,_.each 和 [].forEach 并不完全相等。 _.each 也适用于对象。 _.each 不会跳过未定义的值。 [].forEach 需要一个数组,并跳过未初始化的值。
  • 没错,感谢@Cristopher 扩展我的回答
  • 完美的工作。我在上面添加了完整的正确代码。谢谢
猜你喜欢
  • 2012-09-20
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多