我需要能够在运行时合并两个(非常简单)JavaScript对象。例如,我想:

var obj1 = { food: 'pizza', car: 'ford' }
var obj2 = { animal: 'dog' }

obj1.merge(obj2);

//obj1 now has three properties: food, car, and animal

是否有一种内置的方法来实现这一点?我不需要递归,也不需要合并函数,只需要平面对象上的方法。


当前回答

var obj1 = { food: 'pizza', car: 'ford' }
var obj2 = { animal: 'dog' }

// result
result: {food: "pizza", car: "ford", animal: "dog"}

使用jQuery.exde()-Link

// Merge obj1 & obj2 to result
var result1 = $.extend( {}, obj1, obj2 );

使用_.merge()-链接

// Merge obj1 & obj2 to result
var result2 = _.merge( {}, obj1, obj2 );

使用_.exde()-链接

// Merge obj1 & obj2 to result
var result3 = _.extend( {}, obj1, obj2 );

使用Object.assign()ECMAScript 2015(ES6)-Link

// Merge obj1 & obj2 to result
var result4 = Object.assign( {}, obj1, obj2 );

全部输出

obj1: { animal: 'dog' }
obj2: { food: 'pizza', car: 'ford' }
result1: {food: "pizza", car: "ford", animal: "dog"}
result2: {food: "pizza", car: "ford", animal: "dog"}
result3: {food: "pizza", car: "ford", animal: "dog"}
result4: {food: "pizza", car: "ford", animal: "dog"}

其他回答

这似乎就是你所需要的:

var obj1 = { food: 'pizza', car: 'ford' }
var obj2 = { animal: 'dog' }

var obj3 = { ...obj1, ...obj2 }

之后,obj3现在应该具有以下值:

{food: "pizza", car: "ford", animal: "dog"}

在这里试试:

var obj1={food:“pizza”,car:“ford”}var obj2={动物:“狗”}var obj3={…obj1,…obj2}console.log(obj3);

这里是我在代码库中用于合并的内容。

function merge(to, from) {
  if (typeof to === 'object' && typeof from === 'object') {
    for (var pro in from) {
      if (from.hasOwnProperty(pro)) {
        to[pro] = from[pro];
      }
    }
  }
  else{
      throw "Merge function can apply only on object";
  }
}

让obj1={a:1,b:2};让obj2={c:3,d:4};let merged={…obj1,…obj2};console.log(合并);

ES2018/TypeScript:很多答案都可以,但当您需要合并两个对象而不覆盖重叠的对象键时,我已经找到了一个更优雅的解决方案。

我的函数还接受无限数量的对象作为函数参数进行合并:

(这里我使用的是TypeScript表示法,如果您使用的是纯JavaScript,请随意删除函数参数中的:object[]类型)。

const merge = (...objects: object[]) => {
  return objects.reduce((prev, next) => {
    Object.keys(prev).forEach(key => {
      next[key] = { ...next[key], ...prev[key] }
    })
    return next
  })
}

使用jQuery库尝试这种方式

let obj1 = { food: 'pizza', car: 'ford' }
let obj2 = { animal: 'dog' }

console.log(jQuery.extend(obj1, obj2))