合并jQuery中的对象,具有$ .extend函数的反向效果

时间:2014-01-21 15:57:52

标签: javascript jquery

快速提问 - 假设我们有这两个对象:

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>

或者我是否需要从头开始编写代码?

5 个答案:

答案 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];
    }
  }
};

Demo

答案 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;
}

内部扩展创建一个单独的,正确合并的对象。然后外部扩展将属性复制到累加器上。