2015-02-08 78 views
0

我想用underscore.js each()函数替换JavaScript For Loop。使用_.each()函数代替循环的JavaScript

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 
    }) 
} 

我是新来的使用下划线,所以不太确定最好的方法来做到这一点。当为此使用​​函数时,是否需要索引迭代?

UPDATE:

// 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 
    }) 

    }); 

} 
+0

各是迭代,这看起来更像是次案件。 – dandavis 2015-02-08 03:56:26

回答

2

我这里假设你有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 
    }) 
} 
+1

可能有趣的是_.each和[] .forEach不完全相同。 _.each也适用于对象。 _.each不会跳过未定义的值。 [] .forEach需要一个数组,并跳过未初始化的值。 – Cristopher 2015-02-08 04:48:39

+0

没错,谢谢@Cristopher延长我的回答 – andrusieczko 2015-02-08 06:34:50

+0

完美的工作。我在上面添加了完整正确的代码。 THKS – Robert 2015-02-08 06:43:11