jQuery $ .each()反向/反向迭代

时间:2014-07-24 10:07:24

标签: jquery each

我正在使用$.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
  • 来实现

3 个答案:

答案 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() 的工作方式,只是每次迭代输出一个对象及其值。我使用与此类似的函数来获取对象的值、键和索引。