Я пытаюсь сравнить два объекта. Я использую socket.io для отправки объекта nodes
клиенту.Передача/сравнение по ссылке для объектов javascript
Мои 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 is changed
.
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
. Как скопировать объект и СРАВНЕНИЕ его свойств эффективно?
Вы понимаете, что это не действует Javascript? '' 101 '{} 'должно быть' '101': {}' –
Вы можете сделать глубокую копию объекта, чтобы избежать ссылки: http://stackoverflow.com/questions/122102/what-is-the-most- эффективный путь к клону-объекту –
используют библиотеки, такие как lodash/underscore. – hassansin