合并没有新键的JSON对象
merge JSON objects without new keys
如何合并两个JSON对象,但不包括在第一个对象中不存在的属性?
输入var obj1 = { x:'', y:{ a:'', b:'' } };
var obj2 = { x:1, y:{ a:1, b:2, c:3 }, z:'' };
输出obj1 = { x:1, y:{ a:1, b:2 } };
ps.对象有一个方法叫做preventExtensions,但它似乎只阻止属性的直接扩展,而不是更深的扩展。
/*
Recursively merge properties of two objects
ONLY for properties that exist in obj1
*/
var obj1 = { x:'', y:{ a:'', b:'' } };
var obj2 = { x:1, y:{ a:1, b:2, c:3 }, z:'' };
function merge(obj1, obj2) {
for( var p in obj2 )
if( obj1.hasOwnProperty(p) )
obj1[p] = typeof obj2[p] === 'object' ? merge(obj1[p], obj2[p]) : obj2[p];
return obj1;
}
merge(obj1, obj2 );
console.dir( obj1 ); // { x:1, y:{ a:1, b:2 } }
对解决方案进行了一些小调整,增加了对数组的支持(替换,而不是追加——那样会比较困难):
function merge(obj1, obj2) {
for( var p in obj2 )
if( obj1.hasOwnProperty(p) )
obj1[p] = (typeof obj2[p] === 'object' && !(p.length)) ? merge(obj1[p], obj2[p]) : obj2[p];
return obj1;
}
相关文章:
- jQuery匹配JSON对象的部分文本
- 如何在Javascript中将JSon对象转换为数组
- 我可以在json对象中添加一个函数吗
- 使用JS将数组转换为json对象
- 如何为json对象中的段发送array[]
- 将JSON对象传递给angular指令
- 更改JSON对象的结构
- 访问JSON对象内部的数组元素
- 在ejs-partial中对JSON对象进行迭代
- 遍历 JSON 对象并检查 URL 是否以某个值结尾
- 访问嵌套JSON对象的键,其中键是动态的
- json对象中缺少对象循环
- 发送json对象或使用express路由呈现视图
- 在play2框架中向json对象添加下拉列表项
- 元素名称上带有短划线 (-) 字符的 Json 对象
- autocomplete不接受源的json对象
- 如何在javascript中创建动态json对象
- 在使用客户端脚本时拾取JSON对象
- 如何通过json对象数组为嵌套对象赋值
- 构造JSON对象