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);
};
})