我有这个javascript代码,使用jquery.extend:
hash1 = {"/":{"programme-nav":true}};
hash2 = {"/":{"what-is-scheme":true}};
merged = $.extend(hash1, hash2);
deep_merged = $.extend(true, hash1, hash2);
//expected_deep_merged = {"/":{"programme-nav":true, "what-is-scheme":true}};
console.log("merged = "+JSON.stringify(merged));
// gives {"/":{"what-is-scheme":true}};
console.log("deep_merged = "+JSON.stringify(deep_merged));
// also gives {"/":{"what-is-scheme":true}};
Run Code Online (Sandbox Code Playgroud)
根据API(https://api.jquery.com/jquery.extend/),true作为第一个参数传递将递归合并对象.在这种情况下,我希望在评论中得到结果.但是,我和非深度扩展时的情况相同.
我已经为此设置了一个jsfiddle,输出到控制台,https://jsfiddle.net/0725apqn/2/ ,这样你就可以玩了.
任何人都可以解释我哪里出错了?谢谢,马克斯
编辑:我是个白痴.将true作为第一个参数传递正确进行深度合并,但我没有注意到的是我已经在我的示例的第一部分(我在非深度合并中)覆盖了 hash1,所以当我来做"深度"合并,我实际上是这样做的:
deep_merged = $.extend(true, {"/":{"what-is-scheme":true}}, {"/":{"what-is-scheme":true}});
Run Code Online (Sandbox Code Playgroud)
大规模的"doh".感谢任何阅读此内容的人.我将尽可能多地奖励,然后删除这个问题.
小智 5
Extend不会复制您的数据结构,它会修改作为第一个参数传递的数据 - 由方法返回.
巡视第一次调用以修改'hash1',最终与'hash2'相同.
在第二个调用中,您将合并两个相同的哈希值.
要实现您的目标,请在extend参数中传递一个新实例.
result = $.extend(true, {}, hash1, hash2);
Run Code Online (Sandbox Code Playgroud)
此调用不会修改'hash1'
| 归档时间: |
|
| 查看次数: |
84 次 |
| 最近记录: |