gpt4 book ai didi

javascript - 通过 JavaScript 对象的引用传递/比较

转载 作者:太空宇宙 更新时间:2023-11-04 02:53:22 24 4
gpt4 key购买 nike

我正在尝试比较两个对象。我使用 socket.io 将 nodes 对象发送到客户端。

我的server.js是:

var nodes = {'101':{ID:'101',x:100,y:200},
'102':{ID:'102',x:200,y:200}};
socket.emit('message', nodes);

在我的客户端中,我想仅在第一次接收时创建对象nodes 的副本。将其保存到变量 oldNodes 中,下次套接字接收到 nodes 对象时,与 oldNodes 进行比较并输出哪个属性已更改。

例如,如果它收到 var Nodes = {'101':{ID:'101',x:100,y:200},'102':{ID:'102',x:200,y:300}};,它应该打印(console.log)nodes[102].y已更改

client.html:

socket.on('message', function(nodes){
if (oldNodes == undefined){
var oldNodes = nodes;
}
else{
//compare oldNodes & nodes
//print result
}
});

对于复制,var oldNodes = Nodes; 不是我想要的,因为 javascript 将对象作为引用传递。因此,即使 oldNodes 和 Nodes 具有相同的内容,(oldNodes == Nodes) 也会产生 false。如何有效地复制对象并比较其属性?

最佳答案

从您的代码看来,问题与 passbyref 无关。如果您在函数外部声明 oldNodes,然后在 if 语句内用 var 对其进行赋值,则 oldNodes 将不会在 else block 中定义。这可能就是您正在寻找的东西?

if (oldNodes == undefined){
oldNodes = nodes;
}

关于javascript - 通过 JavaScript 对象的引用传递/比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31176544/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com