快速提问 - 假设我们有这两个对象:
var obj={str:'',int:0,bool:false,arr:[]};
var paramObj={str:'Hey',bool:true};
jQuery中的.extend()函数的工作方式如下:(据我所知)
$.extend(obj,paramObj);
// obj={str:'Hey',int:0,bool:true,arr:[]};
但是我想要一些像这样的东西,但反之亦然:
$.extendRev(paramObj,obj);
// paramObj={str:'Hey',int:0,bool:true,arr:[]};
在jQuery(或本机)语言中是否存在这样的函数,它将两个对象合并在一起,将对象值保留在第一个对象中,如果它们在第一个对象中不存在,则仅添加第二个对象中的对象值。 / p>
或者我是否需要从头开始编写代码?
答案 0 :(得分:9)
您可以简单地使用空对象作为起点:
$.extend({},obj,paramObj);
Chrome的控制台显示结果为
Object {str: "Hey", bool: true, int: 0, arr: Array[0]}
答案 1 :(得分:2)
只是为了向您展示香草JS的样子,这会将b
合并到a
中:
function extendObject(a, b) {
if (a && b) {
for (var key in b) {
if (!a.hasOwnProperty(key)) a[key] = b[key];
}
}
};
答案 2 :(得分:1)
如果你想使用普通的javascript,你可以这样做:
var a = {str:'Hey',bool:true};
var b = {str:'',int:0,bool:false,arr:[1,2,3]};
function x_extend(obj1, obj2){
for(prop in obj2){
if (obj1.hasOwnProperty(prop) === false){
obj1[prop] = obj2[prop];
}
}
}
x_extend(a, b);
console.log(a);
答案 3 :(得分:0)
扩展功能也可以合并多个对象..
var obj={str:'',int:0,bool:false,arr:[]};
var paramObj={str:'Hey',bool:true};
var p= {}
$.extend(p,obj, paramObj);
答案 4 :(得分:0)
当您需要通过从叶到根遍历设置提供程序层次结构来累积设置时,通常会出现这种情况。以下是我的表现方式:
while(provider) {
$.extend(accumulator, $.extend({},provider.defaults,accumulator)); // <---
provider = provider.parent;
}
内部扩展创建一个单独的,正确合并的对象。然后外部扩展将属性复制到累加器上。