代码之家  ›  专栏  ›  技术社区  ›  A. Gladkiy

通过此数组向循环中的数组添加项

  •  0
  • A. Gladkiy  · 技术社区  · 8 年前

    我有以下方法:

    var items = [1,2,3];
    $.map(items, function (item) {
      if (item === 1) {
        items.push(4);
      }
      console.log(item);
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

    我期望在控制台1,2,3,4中,但是请看1,2,3。我是说我想多看一个循环项目。

    我能解决它吗?如果是,我该怎么解决?

    3 回复  |  直到 8 年前
        1
  •  2
  •   Jonathan Lonowski    8 年前

    迭代器方法,比如 .map() .forEach() ,将阻止访问在迭代过程中仅使用原始元素添加的元素 length

    为了避免这种情况,您需要使用标准循环,例如 for..of default array iterator 随着进展):

    var items = [1, 2, 3];
    
    for (var item of items) {
      if (item === 1) {
        items.push(4);
      }
      
      console.log(item);
    }

    当然,除了当前的示例之外,还要注意循环不会因为总是有新元素要迭代到下一个元素而变得无限大。

        2
  •  1
  •   Kiran Shakya    8 年前

    是的,你当然可以解决,但就你的具体情况而言, items 通过值传递给 map 函数,这样就不会意外地更改原始变量。目的 不是用于您正在使用的内容,而是用于通过对象或关联数组的特定键进行映射。您应该使用for循环或其他方法来获得所需的输出。

    var items = [1, 2, 3];
    for (var i = 0; i < items.length; i++) {
      const item = items[i];
      if (item === 1) {
        items.push(4);
      }
      console.log(item);
    };
        3
  •  0
  •   Deepak Sharma    8 年前

    福林 而不是 ,因为有时 福洛夫 给出一个错误(也许 福洛夫 不支持旧版本的js。。

             var items = [1,2,3];
             var k;
             for (k in items){
               if(items[k] === 1){
      	         items.push(4);
                }
             }
             alert(items);