javascript对象的类似于merge/concat的方法.不延伸
A merge / concat like method for javascript objects.. not extend
我想加入具有类似键的嵌套对象:
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的extend方法和我见过的类似方法从未连接Object属性,这正是我想要的。除了自己构建这种方法之外,我希望并且非常确信已经有了解决方案。。
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>
这里有一个我写的简单方法,它很好地完成了这个技巧,不需要为这个功能导入一个巨大的库。
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;
}
相关文章:
- electronic BrowserWindow的最小高度和宽度在hide()show()方法之后不起作用
- 有没有任何方法可以将控制器从文件加载到ui路由器$stateProvider中
- 数组在递归方法中设置为null
- 打破承诺链的好方法是什么
- 在使用Polymer'加载所有json文件后执行方法;s的核心ajax
- 使用“;这个“;JavaScript原型方法中的关键字
- 序列化数据属性中对象的最可靠方法
- 使用Objective-C的JavaScript注入方法
- 有没有一种方法可以添加相同的项目val=“0”;4〃;到JavaScript中数组的每个对象
- 有没有一种方法可以防止img get请求使用css或js发生
- Javascript,有没有一种方法可以将数组写成没有逗号或空格的单个文本字符串
- toBoolean方法类似于toString
- 如何在单击复选框后调用控制器方法
- 是否有任何方法可以使用jQuery替换在数组中定义值的文本
- 递归使用 eval() 是检查程序执行的好方法吗?
- 如何在webView,Android中从@JavascriptInterface方法调用Javascript
- toLocaleDateString和toLocaleString方法不尊重机器时区
- 为什么不't concat方法会影响数组的长度属性
- javascript对象的类似于merge/concat的方法.不延伸
- Cordova JQuery错误VS2015:异常:无法调用方法'concat'的未定义