如何通过引用将对象属性复制到另一个对象

How to copy object properties to another object by reference

提问人:Robert M. 提问时间:10/25/2023 更新时间:10/25/2023 访问量:78

问:

我希望能够通过引用将多个对象的属性捆绑到另一个对象中,这样当我更改捆绑对象中的属性时,它会改变原始对象。我正在使用扩展运算符将对象属性分配给新对象。

objectA = {"key1" : 1, "key2" : 2, "key3" : 3}
objectB = {"key4" : 4, "key5" : 5, "key6" : 6}

bigObject = {...objectA, ...objectB}
bigObject["key1"] = 50;

Logger.log(bigObject["key1"]) //outputs 50
Logger.log(objectA["key1"]) //outputs 1

我知道 Javascript 按值复制,除非您复制对象,但我不想要对象的对象,我想要来自其他对象的属性对象。有什么办法可以做到这一点吗?提前致谢。

JavaScript 对象 引用 mutate spread-syntax

评论

3赞 deceze 10/25/2023
您需要构造一个更复杂的对象,其中包含 getter 和 setter 和/或代理对象,该代理对象会主动将应用于它的更改应用于其他对象。无法“引用”基元值。
2赞 Pointy 10/25/2023
是的,设置这样的东西会非常复杂,我认为退后一步并评估为什么你觉得你需要这个是完全值得的。
0赞 Robert M. 10/25/2023
@Pointy 是的,deceze 的建议会让我想要这个的理由变得毫无意义。简单地说,我有需要单独使用的对象,但我也希望能够遍历或在所有对象上使用 Object.values,而不必单独对每个对象这样做。这是为了简化,而不是复杂化。
0赞 Robert M. 10/25/2023
@Pointy 不过我很困惑。这个家伙谈到了使用扩展将数组元素复制到对象中,以及原始数组元素在更改为对象时可变的问题。我错过了什么?stackoverflow.com/questions/50010725/......
1赞 Bergi 10/25/2023
@RobertM。这个问题是关于嵌套结构的,但 your / 和 都不是嵌套的。如果对象包含其他对象,则浅克隆将复制对象引用 - 根据访问它们的方式,您可以更改引用本身,也可以跟随它并更改从原始对象和克隆对象引用的共享目标。objectAobjectBbigObject

答:

1赞 Sahab 10/25/2023 #1
hope below code can help 


const rebuildMergedObject  = () => {

  for (const prop in bigObject) {
    if (bigObject.hasOwnProperty(prop) && prop !== "sourceObjects") {      
      for (const sourceObject of bigObject.sourceObjects) {
        
        if(sourceObject.hasOwnProperty(prop) ) {
            sourceObject[prop] = bigObject[prop];
        }
        
      }
    }
  }

};


var objectA = {"key1" : 1, "key2" : 2, "key3" : 3}
var objectB = {"key4" : 4, "key5" : 5, "key6" : 6}
var bigObject = { ...objectA, ...objectB };
bigObject.sourceObjects = [objectA, objectB];
bigObject["key1"] = 50;

rebuildMergedObject();

console.log(bigObject); 
console.log(objectA); 

评论

0赞 Robert M. 10/26/2023
谢谢。实际上,我一直在寻找一种本地方法来避免做这样的事情。不过,我总是很感激你的时间和精力。