【问题标题】:How does one update an array's indices after using $.each使用 $.each 后如何更新数组的索引
【发布时间】:2015-06-09 23:11:43
【问题描述】:

当我遍历一个数组时,我正在使用 jQuery 的 $.each 函数来附加(然后是 delete)每个项目。然后我使用if 语句在删除 8 个对象后停止迭代。这是一个非常简单的例子:

$.each(media, function(index, item) {
    if (index < 8) {
        $list.append(item);
        delete media[index];
    } else {
        return false
    }
});

问题是,如果我第二次运行代码,它会运行八次......但没有附加任何内容。这是第二次运行后来自 Chrome 控制台的屏幕截图:

似乎这个怪癖与每次使用$.each 后我的索引都不会重新排序/设置这一事实有关。我是否遗漏了什么,或者有人知道对此有一个优雅的解决方法吗?

【问题讨论】:

    标签: javascript jquery arrays each


    【解决方案1】:

    使用移位功能?

    var media = [1,2,3,4,5,6,7,8, 9, 10];
    var $list = [];
    for (var i = 0; i < 8; i++) {
        $list.push(media.shift ());
    }
    

    var media = [1,2,3,4,5,6,7,8, 9, 10];
    var $list = [];
    
    $.each(media, function(index, item) {
        if (index < 8) {
            $list.push(media.shift());
        } else {
            return false
        }
    });
    

    返回相同的东西

    console.log(media) = [9, 10]
    console.log($list) = [1, 2, 3, 4, 5, 6, 7, 8]
    

    【讨论】:

      【解决方案2】:

      delete 将数组中的项目替换为 undefined ;尝试使用Array.prototype.splice()

      var i = 0;
      
      do {
        var j = media.splice(0, 1);
        $list.append(j);
        ++i;
      } while (i < 8);
      

      var media = "abcdefghijklmnopqrstuvwxyx".split("");
      
      var $list = $("span:first");
      var _media = $("span:last");
      
      var i = 0;
      
      do {
        var j = media.splice(0, 1);
        $list.append(j);
        ++i;
      } while (i < 8);
      
      _media.append(media);
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
      </script>
      list: <span></span><br />
      media: <span></span>

      【讨论】:

        【解决方案3】:
        var media_8= media.slice(0,8)
        media= media.slice(8,media.length-8)
        media_8.forEach(function(item) {
            $list.append(item);
        });
        

        【讨论】:

          猜你喜欢
          • 2016-10-21
          • 2011-03-23
          • 2020-07-20
          • 1970-01-01
          • 2019-06-25
          • 2015-01-23
          • 2020-03-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多