如何合并两个JavaScript对象?

时间:2016-07-12 08:31:35

标签: javascript

我有两个JavaScript对象

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular.min.js"></script>
<div ng-app="myApp">
  <div ng-controller="SuperController as s">
    <my-directive pics="s.pics">
    </my-directive>
  </div>
</div>

我想连接两者并希望得到这个结果

a =  {"aa" : "foo"}
b = {"b" : "bar"}

在普通的javascript中执行此操作的最简单方法是什么。我没有使用任何外部库,如jquery或下划线。

3 个答案:

答案 0 :(得分:3)

使用Object.assign,此处为documentation

var mergedObject = Object.assign(a, b);

请注意Object.assign将从左向右合并,因此如果稍后在参数列表中添加,则会覆盖任何相同的键。

答案 1 :(得分:2)

var o1 = {"aa" : "foo" };
var o2 = { "b" : "bar" };

var obj = Object.assign(o1, o2);

答案 2 :(得分:2)

理想情况下,正如前两个答案中所建议的那样,使用Object.assign是最好的选择,除非浏览器支持另有规定,但MDN documentation提供了ES5 polyfill。

if (typeof Object.assign != 'function') {
  Object.assign = function(target) {
    'use strict';
    if (target == null) {
      throw new TypeError('Cannot convert undefined or null to object');
    }

    target = Object(target);
    for (var index = 1; index < arguments.length; index++) {
      var source = arguments[index];
      if (source != null) {
        for (var key in source) {
          if (Object.prototype.hasOwnProperty.call(source, key)) {
            target[key] = source[key];
          }
        }
      }
    }
    return target;
  };
}