javascript - 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' 的对象数组
我在这里缺少一些棘手的异步业务吗?提前致谢。
解决方案
对于包含其他对象或数组的对象和数组,复制这些对象需要深拷贝。否则,对嵌套引用所做的更改将更改嵌套在原始对象或数组中的数据,这里的代码:
const before=JSON.parse(JSON.stringify(props.answers));
如果您有复杂的对象,包括日期、函数、未定义、无穷大、[NaN]、正则表达式、映射、集合、Blob、FileLists、ImageDatas、稀疏数组、类型化数组。
我建议使用。
推荐阅读
- python - 如果 json 文件中的 KeyAttribute 不可用,如何传递空值(在 python 中获取 Key Error)
- ios - 单元格尺寸 rowHeight 大小
- spss-modeler - 更改神经网络节点 SPSS Modeler 中的学习率
- groovy - Groovy 是否有专门的语法来查找集合中的元素,或者如果找不到则抛出异常?
- cucumber-junit - Cucumber junit 在 gherkin.GherkinDialectProvider 出现错误 java.lang.NoClassDefFoundError 失败
- pyspark - Azure Databricks Spark SQL 查询到 CosmosDB 从其他文档中获取列
- php - Magento 管理员在 nginx 上显示 ERR_TOO_MANY_REDIRECTS
- c++ - 分配 std::vector 元素的两种方法
- vba - 使用一个命令按钮从多个查询发送多封电子邮件
- php - cURL 请求在特定呼叫中间歇性失败,邮递员工作得很好