我正在使用$.each()
解析数组,但在其中,我正在使用.splice()
方法,所以我需要向后迭代。有可能吗?
var store = [...];
//...
var rules = [...];
//...
$.each(store, function(index, element) { // This loop needs to iterate backward
$.each(rules, function(index2, rule) {
if (element.id == rule.id) {
store.splice(index, 1);
}
});
});
警告:
for
,我只是想知道它是否可以使用$.each
答案 0 :(得分:1)
你可以使用$ .each,但你必须像你一样减少indice变量(index,index2)。
答案 1 :(得分:0)
$。each(store.reverse(),function(index,element){//此循环向后迭代 [...]
此方法有效,与这篇帖子stackoverflow.com/questions/1394020/jquery-each-backwards相同。但是这里的重点是,您正在将其应用于“商店”。
答案 2 :(得分:0)
$.each()
本身不能向后迭代,因为它没有修饰符。它接受的输入来自选择器。可以转换成数组。然后 $.each()
按索引(0、1、2、...等)向前迭代。
反转流的唯一方法是使用 Array.reverse()
或找到执行此操作的迭代器循环。您还可以构建满足您目的的递归函数。但所有这些选项都超出了 $.each()
以下是迭代循环中需要考虑的选项:
-> for 循环(反向)
var value = 10;
for (var i = value; i; i--){
console.log(i);
//bonus
//return back to a proper flow is to add the whole value it
console.log(value + i);
}
-> while 循环(反向):
var X=9,Y=X;
while (--Y) {
console.log(Y);
//will only stop at 1 since while cannot return a falsy value
//0 is considered a falsy value, and is nullified from the loop
}
考虑反向数组迭代的选项:
-> Array.reverse().forEach()
正如我已故的导师曾经说过的那样,There is more than one way to carve an elephant from stone.
这个网站的存在是因为很多人都有解决问题的创造性方法。不幸的是,$.each()
中没有任何内置功能可以独立向后运行,因此人们求助于其他方式(其中一些已在上面提到)。对不起,这不是一个令人满意的“是”答案,但希望能解释为什么 $.each()
只能向前循环。如果这是我自己制定的解决方案,那就是:
var loopy=(value,output)=>{
for(var i = value; i; i--){
output.call(this,{
index:{
forward:()=>value-i,
reverse:()=>i-1
},
count:{
forward:()=>1+value-1,
reverse:()=>i
}
})
}
}
loopy(10, i=>console.log( i.index.forward() ))
上面的函数允许您选择整数计数和索引计数。这类似于 Array.forEach()
的工作方式,只是每次迭代输出一个对象及其值。我使用与此类似的函数来获取对象的值、键和索引。