2014-10-17 75 views
0

我想加盟嵌套对象与同类项:合并/ Concat的类似方法对JavaScript对象..没有扩展

var obj1 = { 
    id: 1, 
    styles: { 
    background: "white" 
    } 
}; 

var obj2 = { 
    id: 2, 
    styles: { 
    border: "1px solid #ccc" 
    } 
}; 

var merged = merge(obj1, obj2); 

// desired outcome 
merged = { 
    id: 2, 
    styles: { 
    background: "white", 
    border: "1px solid #ccc" 
    } 
} 

jQuery的延长是我见过从来没有CONCAT对象属性的方法以及类似的,这是我正在寻找的东西。除了构建这个方法我自己,我希望并非常肯定已经有一个解决方案,这个..

+1

你刚刚描述的正是jQuery.extend在深度复制模式下所做的。 http://api.jquery.com/jQuery.extend – 2014-10-17 22:02:13

+1

点击运行代码片段在我的答案,看控制台。我的结果与你期望的结果有什么不同? – 2014-10-17 22:09:12

+1

您jsbin有一个额外的线路。 'VAR OBJ 2 = {}' – 2014-10-17 22:11:34

回答

1

jQuery.extend你想要做什么。

var obj1 = { 
 
    id: 1, 
 
    styles: { 
 
    background: "white" 
 
    } 
 
}; 
 

 
var obj2 = { 
 
    id: 2, 
 
    styles: { 
 
    border: "1px solid #ccc" 
 
    } 
 
}; 
 

 
var merged = jQuery.extend(true, obj1, obj2); 
 

 
// desired outcome 
 
console.log(merged); 
 
console.log({ 
 
    id: 2, 
 
    styles: { 
 
    background: "white", 
 
    border: "1px solid #ccc" 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

+0

完美的,不知道我怎么错过了。我不想导入所有的jQuery的只是这种方法虽然..除了浏览源代码,知道这方面的任何学家的? – micahblu 2014-10-17 22:14:07

+0

存在,拉出来https://www.npmjs.org/package/extend – 2014-10-17 22:14:32

+0

https://github.com/mout/mout/blob/v0.1.0/src/object/deepFillIn.js想到的NPM模块这应该做的伎俩 – micahblu 2014-10-17 22:15:34

0

这里有一个简单的方法,我写了这很好的伎俩,并且不需要你导入一个巨大的图书馆只是这个功能。

function extend(obj /* , ...source */) { 
    for (var i = 1; i < arguments.length; i++) { 
     for (var key in arguments[i]) { 
     if (Object.prototype.hasOwnProperty.call(arguments[i], key)) { 
      obj[key] = (typeof arguments[i][key] === 'object' ? extend(obj[key], arguments[i][key]) : arguments[i][key]); 
     } 
     } 
    } 
    return obj; 
    }