javascript - 将 JavaScript 对象从一个数组复制到另一个数组是如何工作的?
问题描述
我想将一个JavaScript元素从一个数组复制到另一个数组,然后编辑它的一些属性。我使用的具体代码是:
var friends=[]
var enemies=[
{
name: "Slime",
health: 20,
attack: 10,
defense: 15,
speed: 5,
drops: {name: "Vial of Blood", chance: 10, type: "consumable", id: 0},
friendable: {possible: false}
},
{
name: "Bat",
health: 15,
attack: 5,
defense: 10,
speed: 20,
drops: {name: "Speedy Vial", chance: 5, type: "consumable", id: 1},
friendable: {possible: true, item: 0}
}
]
function dofriend(num11,num12) {
let protype=enemies[num12]
sack.splice(num11,1)
invid.splice(num11,1)
invtype.splice(num11,1)
friends.push(protype)
friends[friends.length-1].drops=protype.name
friends[friends.length-1].name=prompt("Pick a name for your friend.",protype.name)
battlechk=false;
document.getElementById("textbox").innerText="You befriended "+friends[friends.length-1].name+"!"
document.getElementById("optionbox").innerHTML="<button class=\"option\" onclick=\"cancel()\">Yay!</button>"
}
应该发生的是一个新元素被添加到与friends
数组中的元素之一相同的enemies
数组中。然后允许玩家为friends
数组中的那个元素输入一个新名称。自从掉落后,部分元素不再需要,我想将其替换为原始名称以备将来使用。实际发生的是enemies
元素和friends
元素都被编辑为相同。我不明白为什么。
在我编辑内容时可能会发生其他事情,但这似乎不太可能。我检查并没有发现任何东西,但如果你想看看完整的代码可以在这里找到。此示例中使用的文件是friend.js
和globalvars.js
。此外,battle.js
和explore.js
也涉及到这里。battle.js
导致friend.js
被调用,然后friends
在 explore.js 中使用该数组。
我有兴趣了解复制时 JavaScript 元素的行为方式,以及是否有办法在不编辑enemies
数组中的元素的情况下做到这一点。
编辑:将JSON的每个实例更改为JavaScript,因为我认为这是JSON是错误的。
解决方案
JavaScript 对象不能被复制。相反,所有可能的副本都链接回原件。您必须使用所需的值对新对象进行硬编码,以便它不会链接到原始对象。例如:
let f={
name: "namehere",
secondAttribute: 0
}
let r={
name: f.name,
secondAttribute: f.secondAttribute
}
r 没有链接到 f,即使它们具有相同的属性。您可以编辑 r 或 f 而不更改另一个。
推荐阅读
- vue.js - 如何在 vue js 的 v-for 循环中使用 v-model 和对象
- office365 - 如何从 office365 api 获取许可证过期和过期计数
- spring-boot - Spring-boot:单元/集成测试期间 Bean 为空
- systemc - 一个 SC_CTHREAD 和另一个 SC_CTHREAD 之间的通信延迟一个时钟周期
- node.js - Node.js Express - 使用查询参数获取请求路径
- bash - 如何从标准输入上的文件名中去除路径
- amazon-web-services - AWS codebuild - 在单个构建项目中从所有项目中删除与 Github 的断开连接
- hugo - 有没有办法将 bookdown 文档嵌入到 blogdown 帖子中?
- trackpy - 如何找出图像中发生子网超大异常的位置?
- javascript - 如何使用 React 中的受控组件删除 :checked 伪类?