Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:在循环时向数组中添加值,该值也将包含在循环中_Javascript_Arrays_Loops - Fatal编程技术网

Javascript:在循环时向数组中添加值,该值也将包含在循环中

Javascript:在循环时向数组中添加值,该值也将包含在循环中,javascript,arrays,loops,Javascript,Arrays,Loops,抱歉,如果这是一个副本,似乎找不到它 var a = [1,2,3,4]; a.forEach(function(value){ if(value == 1) a.push(5); console.log(value); }); 我想知道是否有一种方法(任何类型的循环或数据类型)可以在循环期间输出1 2 3 4 5(或以任何顺序,只要所有5个数字都在其中)显而易见的解决方案: var a = [1,2,3,4]; for (var i=0; i<a.length; i++){

抱歉,如果这是一个副本,似乎找不到它

var a = [1,2,3,4];
a.forEach(function(value){
  if(value == 1) a.push(5);
  console.log(value);
});
我想知道是否有一种方法(任何类型的循环或数据类型)可以在循环期间输出1 2 3 4 5(或以任何顺序,只要所有5个数字都在其中)

显而易见的解决方案:

var a = [1,2,3,4];
for (var i=0; i<a.length; i++){
  var value = a[i];
  if(value == 1) a.push(5);
  console.log(value);
}
var a=[1,2,3,4];

for(var i=0;i使用
Array.prototype.forEach()
将不会对执行期间附加到数组或从数组中删除的元素应用回调。从:

forEach处理的元素范围设置在第一个元素之前 调用callbackfn.Elements,这些元素在 callbackfn不会访问对forEach开始的调用

但是,您可以使用标准的
for
循环,并在每次迭代期间有条件地检查数组的当前长度:

for (var i = 0; i < a.length; i++) {
    if (a[i] == 1) a.push(5);
    console.log(a[i]);
}
for(变量i=0;i
更好的替代解决方案:

if (a.indexOf(1) >= 0) a.push(5);
a.forEach( ... );

OK,可能不是严格的,因为它跨越了两次数组。但是,你应该首先考虑为什么要在迭代的同时修改数组。这是一个不寻常的情况。

< P>因为你似乎使用了和声,这样的生成器如何:

function *iter(array) {
    for (var n = 0; n < array.length; n++)
        yield array[n];
}

打印1 2 3 4 5

因此这是一个快速测试,似乎效果良好:

var a = [1,2,3,4,5];
a.forEach (function (val,index,array) { 
 if (val == 5) {  
  array.push (6);
 };  
 console.log (val); 
});

@我得说,这可能和你的代码相同,但这是一个更好的答案;-)正确、清晰的解释,这可能是最好的方法。谢谢。请注意,数组的
indexOf
需要一个垫片才能在较旧的浏览器中工作。这个页面上有一个:@MattBrowne OP使用的是
forEach
和ES6 arrow函数-他不需要
indexOf
垫片。是的,这有点不寻常,但我特别想在同一个循环中进行,因为在我正在编写的简单推理引擎中,它允许使用不同的策略,这可能会带来更好的表现。不,不是和谐。对不起,忘了提了。我使用的typescript几乎与ES6JS相似,任何javascript解决方案都可以。将代码示例更改为更普通的JS。不起作用。。。只需在浏览器控制台中复制/粘贴并测试它(我使用的是Chrome 63.0版)
var a = [1,2,3,4,5];
a.forEach (function (val,index,array) { 
 if (val == 5) {  
  array.push (6);
 };  
 console.log (val); 
});
a.forEach(function fn(item, index) {

if (item == 5) {  

  array.push (6);

 };

})