Javascript将对象插入数组会改变整个数组

标签 javascript arrays object

我正在使用特定的游戏制作框架,但我认为这个问题适用于 javascript

我试图制作一个旁白脚本,以便玩家可以看到“兽人打你”。在他的屏幕底部。我想一次显示最后 4 条消息,如果他们愿意,可能允许玩家回顾日志中的 30-50 条消息。为此,我设置了对象和一个数组以将对象插入。

所以我最初设置了一些这样的变量......

servermessage: {"color1":"yellow", "color2":"white", "message1":"", "message2":""},
servermessagelist: new Array(),

当我通过操作 servermessage.color1 ... .message1 等多次使用此命令(如下)和事件调用的不同数据时...
servermessagelist.push(servermessage)

它用该数据的副本覆盖整个数组......知道为什么或我能做些什么。

因此,如果我插入 color1 “RED” 和 message1 “Rover”.. 数据是正确的,那么如果我插入
color1"yellow"和 message1 "Bus"数据是 .color1:"yellow".message1:"Bus"的两个副本

最佳答案

当你推 servermessage进入 servermessagelist你真的(或多或少)插入了对该对象的引用。所以对 servermessage 所做的任何更改在您引用它的任何地方都会反射(reflect)出来。听起来您想要做的是将对象的克隆推送到列表中。

声明一个函数如下:

function cloneMessage(servermessage) {
    var clone ={};
    for( var key in servermessage ){
        if(servermessage.hasOwnProperty(key)) //ensure not adding inherited props
            clone[key]=servermessage[key];
    }
    return clone;
}

然后每次您想将消息推送到列表中时,请执行以下操作:
servermessagelist.push( cloneMessage(servermessage) );

关于Javascript将对象插入数组会改变整个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11217188/

相关文章:

javascript - Html & JS 在点击时将图像旋转 90 度

javascript - 函数 addEventListener 不适用于 Fetch

c++ - 如何使用 "new"而不是 malloc 分配内存?

java - 在数组中查找具有特定变量的自定义对象

javascript - 解析云代码 : Can you pass objects in a push notification?

javascript - 管理 splitterSide 以将其用作可重用组件

javascript - 当我运行这段 JavaScript 代码来打印数组时,没有显示任何内容。这段代码有什么问题?

javascript - 如何读取从 php 脚本发送的数组的值

javascript - 将参数传递给模块模式函数时未定义

c++ - 在不调用默认构造函数的情况下声明对象