首页 > 解决方案 > Javascript/Typescript array.map 函数正在更改 .map 之前定义的变量的值

问题描述

我正在玩一些反应代码,并观察到意外的(对我而言)行为。有人可以解释发生了什么吗?

export default function AnswerBox(props: any) {
    const before = props.answers;
    console.log('const before ', before);
    props.answers.map((value: any) => {value.selected = 'asdfasdfasdf'})
    console.log('answer props after' , props.answers);

两条日志行都显示了一个带有 'selected':'asdfasdfasdf' 的对象数组

我在这里缺少一些棘手的异步业务吗?提前致谢。

标签: javascriptreactjstypescriptasynchronous

解决方案


对于包含其他对象或数组的对象和数组,复制这些对象需要深拷贝。否则,对嵌套引用所做的更改将更改嵌套在原始对象或数组中的数据,这里的代码:

const before=JSON.parse(JSON.stringify(props.answers));

如果您有复杂的对象,包括日期、函数、未定义、无穷大、[NaN]、正则表达式、映射、集合、Blob、FileLists、ImageDatas、稀疏数组、类型化数组。

我建议使用。


推荐阅读