javascript对象的合并/连接方法..不扩展

时间:2014-10-17 22:00:08

标签: javascript jquery arrays object

我想加入具有类似键的嵌套对象:

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的扩展方法和我见过的类似的方法永远不会连接对象属性,这正是我正在寻找的。除了自己构建这个方法之外,我希望并且非常肯定已经有了解决方案..

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分: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;
  }