javascript对象的类似于merge/concat的方法.不延伸

A merge / concat like method for javascript objects.. not extend

本文关键字:方法 concat 对象 类似于 merge javascript      更新时间:2023-09-26

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

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的extend方法和我见过的类似方法从未连接Object属性,这正是我想要的。除了自己构建这种方法之外,我希望并且非常确信已经有了解决方案。。

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>

这里有一个我写的简单方法,它很好地完成了这个技巧,不需要为这个功能导入一个巨大的库。

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