php 循环大数组 卡死,foreach循环为什么会影响整个大数组?

说明你的totaltab里的每一个元素的每一个元素实际上是同一个元素,比如

let obj = { a: 1 };

let arr = [obj, obj, obj];

arr.forEach(v => console.log(v));

arr[0].a = 2;

arr.forEach(v => console.log(v));

如果你说执行totaltab[0].contactdata = 1只会让totaltab[0].contactdata变成1而不会让totaltab[1].contactdata也变成1,那只能说明totaltab[0] != totaltab[1],而不能说明totaltab[0].contactdata[i][j] != totaltab[k].contactdata[m][n],你执行这段代码验证一下:

console.log(totaltab[0].contactdata[0][0] == totaltab[0].contactdata[0][1]);

console.log(totaltab[0].contactdata[0][0] == totaltab[1].contactdata[0][0]);

以后要把你的代码文本贴出来,不要只贴截图,这样别人才能把你的代码复制出来测试

我自己写了一段测试代码:

let totaltab = [

{

Extra: null,

contactdata: [

[

{

state: 2

},

{

state: -1

},

{

state: -2

},

{

state: 1

}

],

[

{

state: -5

},

{

state: 2

},

{

state: -4

},

{

state: 0

}

]

]

},

{

Extra: null,

contactdata: [

[

{

state: -2

},

{

state: -1

},

{

state: -2

},

{

state: 1

}

],

[

{

state: 3

},

{

state: -2

},

{

state: 1

},

{

state: 0

}

]

]

}

];

let tabtarget = totaltab[0].contactdata;

tabtarget.forEach(item => {

item.forEach(items => {

items.state = items.state >= 1 ? 0 : items.state;

});

});

console.log(JSON.stringify(totaltab, ' ', 2));

结果自己看,没有任何问题。

但如果你的每个items实际上都相等的话,就会出现你说的情况:

let item = { state: 2 };

let totaltab = [

{

Extra: null,

contactdata: [

[ item, item, item, item ],

[ item, item, item, item ],

]

},

{

Extra: null,

contactdata: [

[ item, item, item, item ],

[ item, item, item, item ],

]

}

];

let tabtarget = totaltab[0].contactdata;

tabtarget.forEach(item => {

item.forEach(items => {

items.state = items.state >= 1 ? 0 : items.state;

});

});

console.log(JSON.stringify(totaltab, ' ', 2));

另外你可能注意到了,我写的后面的那段遍历的代码和你的不太一样,但我的代码和你的是等效的,你的会更绕一点。而且js里的变量什么的一般用小驼峰命名,推荐使用totalTab和tabTarget而不是totaltab和tabtarget,短标识符你连着全小写没关系,长了就很难看了。而且你两层遍历的变量名看起来也不太符合逻辑,item是个数组,而它的元素叫items,看着很难受。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值