【问题标题】:jQuery $.each() reverse/backward iterationjQuery $.each() 反向/反向迭代
【发布时间】:2014-09-15 20:09:03
【问题描述】:

我正在使用$.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 是否可以实现

【问题讨论】:

标签: jquery each


【解决方案1】:
$.each(store.reverse(), function(index, element) { // This loop iterate backward
[...]

这行得通,和这篇文章jquery-each-backwards一样。但这里的重点是,您将其应用于store

【讨论】:

    【解决方案2】:

    您可以使用 $.each,但您必须像以前一样减少索引变量(索引、索引 2)。

    【讨论】:

      【解决方案3】:

      $.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() 的工作方式,不同之处在于您在每次迭代时输出一个对象及其值。我使用与此类似的函数来获取对象的值、键和索引。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-27
        • 2017-07-31
        • 1970-01-01
        相关资源
        最近更新 更多