javascript - 保持原始对象不变

标签 javascript object

我已经为一个对象分配了一些数据,并且我希望将来能够像第一次一样使用该对象。每当我对父对象进行更改时,它也会反射(reflect)在子对象中。我该如何解决这个问题?请给出对象、数组、映射的所有可能答案。

var parentObject = someData;
const childObj = Object.assign({}, parentObject);

我只想更改父对象,并且希望将子对象保持为常量以供将来使用。

最佳答案

您可以编写一个方法来检查对象是否被卡住。这是一个示例,其中我合并了父对象和子对象,然后卡住子对象。 同样,如果调用 mergeObject() 来合并父级和子级,则不会合并任何内容。因为我们在第一次合并后卡住了子对象。

/**
 * Merge two object using Object.assign()
 * @param parentObj
 * @param childObj
 * @returns {ReadonlyArray<any>} returns frozen object
 */
function mergeObject(parentObj, childObj) {
   return Object.isFrozen(childObj) ? childObj : Object.freeze(Object.assign({}, parentObj))
}

// Before freezing
var parentObject = {a: 4};
var childObj = mergeObject(parentObject, {});
console.log(childObj); // {a: 4}

// After freezing
parentObject.b = 6;
childObj = mergeObject(parentObject, childObj);
console.log(childObj); // {a: 4}, didn't merge {b: 6}

关于javascript - 保持原始对象不变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57055528/

相关文章:

javascript - 无法调用undefined的save方法。蒙古人

javascript - 获得焦点时选择文本框的所有内容(Vanilla JS 或 jQuery)

javascript - 删除断开 socket.io 上的对象

java - 使用比较器返回具有最大值的对象

javascript - event.preventDefault 与 event.returnValue

javascript - 查找正文中的特定文本并通过 JS 将其删除

java - 创建新对象时,我的计数器保持相同的数字

java - 如何在Bundle中传递自定义对象?

java - 使用具有浮点值的对象对集合进行排序

javascript - 将对象中的键映射到出现的键