var
b = {b: {x:
1
, y:
2
}}
console.log(
Object
.assign(a, b))
将得到
{ b: { x: 1, y: 2 } }
期望得到
{ b: { x: 1,z:3, y: 2 } }
此时需要使用到
lodash的merge方法
可以得到期望值:
{ b: { x: 1, z: 3, y: 2 } }
var _ = require("lodash");
var a = {b: {x: 1, z: 3}}
var b = {b: {x: 1, y: 2}}
console.log(_.merge(a, b));
console.log(a);
注意:
这个方法会改变a的值
参考文档:
https://stackoverflow.com/questions/27936772/how-to-deep-merge-instead-of-shallow-merge
https://lodash.com/docs/4.17.4#merge
深度
对象分配与减少
Deep
Object
.
assign
()用现代的函数式 JavaScript 编写。 受到deep-
assign
和对更
深层次
Object
.
assign
的需求的启发。
没有依赖关系,而且非常小——gzip 压缩后只有大约 450 字节。
需要 10+,它带有npm 。
在您的项目目录中,键入:
npm install deep-
object
-
assign
-with-reduce
yarn add deep-
object
-
assign
-with-reduce
3.0.0 - 删除节点 8 和 9 支持。 如果您希望使用旧版本的 Node,请使用2.x
2.0.0 - 放弃了对 IE 11 的支持,以大幅减少文件大小。
1.2.0 - 添加了deep
Assign
Options以更好地控制数组和对象
合并
1.1.0 - 固定 RegEx
平时我们在处理纯粹对象(键值对对象/JSON)时,如果使用
Object
.
assign
或者对象解构赋值,只会
合并
第一层的数据,而当
合并
嵌套对象,将会直接覆盖掉前面被
合并
对象里的数据,这是因为
Object
.
assign
和对象解构赋值都是只有第一层属于深拷贝,而往下都是浅拷贝,例如:
var obj1 = { a: { b: 1, c: 1 } };
var obj2 = { a: { b: 2 } };
var obj3 = {};
//
Object
.
assign
Object
.
assign
(obj
Object
.
assign
()
在JavaScript中,数据类型分为两大类:基本数据类型和复杂数据类型。
基本数据类型包括:Number、String、Boolean、Null、Undefined、Symbol(ES6 新增)。
复杂数据类型包括
Object
,而所有其他引用类型(Array、Date、RegExp、Function、基本数据类型(Boolean、String、Number)、Math等)都是
Object
类型的实例对象,因此都可以继承
Object
原型对象的一些属性和方法。
在ES6中,Obj
我们只知道
Object
.
assign
()方法能
合并
对象,已存在键的会对其进行更新,不存在的会新增并
合并
生成一个新对象。而不是我们想要的这样的 { a: { x: 1,z:3, y: 2 },d:3 }输出结果会是{ a: { b: 1, c: 2 } ,d:3}但是
Object
.
assign
()方法
合并
只适用于单层对象。我们可以找个替代品来实现对象的深层
合并
(看别的大佬写的代码)就是
Object
.
assign
()方法是单层深拷贝。而这个方法是在a的值的基础上进行更改。...
function deep
Assign
(...param) {
let result =
Object
.
assign
({}, ...param);
for (let item of param) {
for (let [idx, val] of
Object
.entries(item)) {
if (typeof val === '
object
') {
result[idx] = deep
Assign
(result[id
(2). 主要的用途是用来
合并
多个JavaScript的对象。
(3).
Object
.
assign
()接口可以接收多个参数,第一个参数是目标对象,后面的都是源对象,
assign
方法将多个原对象的属性和方法都
合并
到了目标对象上面,如果在这个过程中出现同名的属性...
function isObj(x){
var type = typeof x;
return x !== null && (type === '
object
' || type === 'function');
var hasOwnProperty =
Object
.prototype.hasOwnProperty;
var propIsEnum...
Object
.
assign
方法用于对象的
合并
,将源对象(source)的所有可枚举属性,复制到目标对象(target)。
var nameObj = {name:"sun"}
var ageObj = {age: 18}
Object
.
assign
(nameObj, ageObj)
console.log(nameObj) // {name: "sun", age: 18}
Object
.
assign
()方法的第一个参数是目标对象,后面的参数都是源对象。
注意:如果目标对象与源对象有同名属性,或者