javascript - 当我不想要它时,为什么原始对象会改变?
问题描述
我正在从 API 获取降价,我想在我的 vuejs 应用程序中使用它。
我想访问降价和转换后的数据。
async getNotes() {
var regxHighlights = /id:\b([0-9]+)\b/g;
var regxNotes = /id-\b([0-9]+)\b/g;
fetch(`/books/${this.id}/notes`).then(res => res.json()).then(res => {
var data = res.map(n => {
n.note = converter.makeHtml(n.note)
n.note = n.note.replace(regxHighlights, `<b class="ref noteRef" style="user-select: none;" data="id$1" >id:$1</b>`);
n.note = n.note.replace(regxNotes, `<b class="ref noteRef" style="user-select: none;" data="id-$1" >id-$1</b>`);
return n
})
this.notes = data
this.rawNotes = res
})
},
问题是res
变了!所以data
和res
都是一回事。那不应该发生的正确!
解决方案
听起来响应是一个对象数组。当您这样做时res.map(n
,每个n
都是对原始对象之一的引用。例如,在第一次迭代中,n === res[0]
; 改变n
就会改变res[0]
。
看起来制作对象的浅表副本应该在这里工作:
var data = res.map((originalObj) => {
const newObj = { ...originalObject };
newObj.note = converter.makeHtml(n.note)
.replace(regxHighlights,
`<b class="ref noteRef" style="user-select: none;" data="id$1" >id:$1</b>`)
.replace(regxNotes,
`<b class="ref noteRef" style="user-select: none;" data="id-$1" >id-$1</b>`);
return newObj;
})
推荐阅读
- python - Python 探查器时间不会累加
- c# - ASP.NET Core .NET 6 预览版 7 Windows 服务
- c - C中的while循环重新打印以前的语句
- c++ - (C++) 读取矩阵文件的最快方式(任意大小)
- intersystems-iris - $Increment 和 $Sequence 函数有什么区别?
- parquet - 如何追加到镶木地板文件以及它如何影响分区?
- android - 滚动屏幕直到列表到达顶部
- docker - docker compose v3 的部署资源的行为限制了“cpus”参数设置(是绝对数量还是可用核心的百分比)
- javascript - 多个车把文件未读取 css 文件
- python - 在给定唯一列值的情况下,熊猫数据框如何删除以小于数字的行长为条件的行?