【问题标题】:Copy array by value is not working in foreach in Angular按值复制数组在Angular的foreach中不起作用
【发布时间】:2021-06-01 00:51:54
【问题描述】:

我正在尝试在数组元素中复制数组并根据我的需要进行操作。

 this.question?.labels.forEach((element) => {
      element["options"] = [...this.question?.options]; // I've tried json.stringify() as well but not worked
      element["options"].forEach(e => {
        e.checked = this.question?.userAnswers.find(i => e.key === i.value && element.key === i.key) ? true : false;
      });
    });

我每次都使用[...this.question?.options] 来获取选项的新副本。但它总是在每个元素中保存数组的最后一个值

https://stackblitz.com/edit/pass-array-by-value?file=src%2Fapp%2Fapp.component.ts

【问题讨论】:

  • 这能回答你的问题吗? Deep copying objects in Angular
  • 扩展运算符... 只会制作数组的浅副本。作为对象的数组元素仍将保持其引用并将被变异。您将需要一份 deep 副本。查看重复链接。
  • 我也尝试过 JSON.parse(JSON.stringify(Object)) ,但它不起作用。我创建了 stackblitz 链接供您参考,如果您想查看

标签: javascript arrays angular typescript deep-copy


【解决方案1】:

我确实看到每个标签元素下都填充了正确的选项数组。只需在 html 中使用 pre 标记格式化 json 以获得更好的视图。

Stackblitz - https://stackblitz.com/edit/pass-array-by-value-b1f6aq?file=src/app/app.component.ts

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 2018-03-11
    • 1970-01-01
    • 2021-02-11
    • 2019-11-27
    • 2011-02-19
    • 1970-01-01
    相关资源
    最近更新 更多