javascript - 保持原始对象不变
问题描述
我已经为一个对象分配了一些数据,并且我希望将来使用该对象,就像第一次一样。每当我对父对象进行更改时,它也会反映在子对象中。我该如何解决这个问题?请给出对象、数组、地图的所有可能答案。
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}
推荐阅读
- c# - 带有 Signalr 的 Blazor 服务器 - 通过第三方 OAuth 对用户进行身份验证
- flutter - 将相同值的点渲染到折线图中 | 颤振图
- r - 试图在 R 中关联两个变量
- spring-boot - 多个 bootRun 任务失败
- python - 相对于原点累积滑动窗口
- sql - 不聚合的枢轴列出所有非字符内容
- css - 将 Material UI 按钮定位到行的最右侧
- c++ - 我怎样才能让这个 std::conditional 不评估基于类型的表达式?
- javascript - 在多个 select2 输入中显示选择到搜索建议中的值
- java - 代码片段中的 Loc1 可以应用哪些注解