以下代码的输出如何成为可能?

时间:2017-11-15 16:04:51

标签: javascript angular

this.someService.findDevices()
          .subscribe((segments) => {
            this.segments = Array.from(segments.segments);
            this.packs.forEach((pack) => {
              pack.segments = Array.from(segments.segments);
              pack.segments[0].devices[0].selected = true; //if commented, output is FALSE
              console.log(this.segments[0].devices[0]); // shows TRUE
            });
          });

我创建了一种方法,我尝试将segments数组添加到this.packs中的每个包中。 我正在使用Array.from()创建一个新数组,但出于某种原因,当我将pack.segments[0].devices[0]设置为TRUE时,this.segments[0].devices[0]也会更改为true。

知道怎么解决吗?

2 个答案:

答案 0 :(得分:0)

在名为isSelected的函数内创建一个顶级布尔变量并进行相应设置。然后做你的循环。如果任何一个项目更改了切换,则将设置isSelected并返回正确的布尔值。

答案 1 :(得分:0)

您正在制作segments数组的浅层副本不会克隆其中的devices数组。

要进行深度克隆并使代码按预期工作,请尝试以下操作。



 pack.segments = JSON.parse(JSON.stringify(segments.segments))




注意: 如果您在数组中有任何循环引用,上述内容将无效