2013-12-19 50 views
1

我想运行一个反向循环,并将每个项作为参数传递给一个函数。 我可以使用underscore在单行中反向运行循环

var myItems = [1,2,3,4,5]; 
_.each(myItems, print); //It calls print in sequential order but I want reverse order 

function print(value) { 
    value = value + 1; 
    // Some other modifications 
    console.log(value); 
} 

现在,我需要做同样的事情,但我想运行反向循环。我知道我可以写循环这样

for (var i = myItems.length - 1; i >= 0; i--) { ... } 

我找简洁code..something像_.reverseLoopmyItems.reverseunderscoreArray.prototype是否有其他可用的API可用于反向运行循环并为每个项目执行回调?

+2

_.each(myItems.reverse(),打印); –

+1

这可以使一个很好的开源贡献。 – user2910265

+0

@wared我只是没有意识到'reverse'方法..可能发生在任何人身上。 – sachinjain024

回答

5

reverse()方法反转到位阵列。第一个数组 元素成为最后一个,最后成为第一个。

所以,你可以扭转你的数组,并使用:

_.each(myItems.reverse(), print) 

或者

_.each(myItems.slice().reverse(), print) 
+2

在反向之前添加片会创建一个浅拷贝并保持初始数组未被修改,是否正确? – user2910265

+1

@ user2910265是的。只需使用'array.slice(0).reverse()'。 '0'当然是可选的。 –

+1

@ user2910265使用'slice'是一个选项:'Array.apply(Array,array)'。 – leaf