js_Object.assign(对象的合并)

Posted Syinho

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js_Object.assign(对象的合并)相关的知识,希望对你有一定的参考价值。

定义

object.assign用于对象的合并,将源对象(source)的所有可枚举属性复制到目标对象(target)中

        let targetObj = {
            a: 1
        };
        let sourceObj1 = {
            b: 2
        };
        let sourceObj2 = {
            c: 3
        };
        Object.assign(targetObj, sourceObj1, sourceObj2);

        console.log(targetObj); //a: 1 b: 2 c: 3

同名属性会相互覆盖,源对象后传入的会覆盖先传入的同名属性

        let targetObj = {
            a: 1
        };
        let sourceObj1 = {
            a: 2
        };
        let sourceObj2 = {
            a: 3
        };
        Object.assign(targetObj, sourceObj1, sourceObj2);

        console.log(targetObj); //a: 3

接收非对象作为参数时,进行对象转换

console.log(typeof Object.assign(2));//object

undefined与null无法转换成对象,以它们作为参数会报错

  • 将这两种数据类型作为target会报错,但是作为source不会报错

其它类型数据作为source,除了字符串会以数组形式传入,其它数据均无效果

        let v1 = ‘abc‘;
        let v2 = 25;
        let v3 = true;
        let newObj = Object.assign({}, v1, v2, v3);
        console.log(newObj); //0: "a" 1: "b" 2: "c"

属性名为Symbol值得属性也同样会被拷贝

Object.assign执行的是浅拷贝

对数组的处理

        var arr1 = [1, 2, 3];
        var arr2 = [4, 5];
        Object.assign(arr1, arr2);
        console.log(arr1); //0:4 1:5 2:3

这里将数组视为了属性名为0,1,2的对象,所以发生了同名属性值的替换。

以上是关于js_Object.assign(对象的合并)的主要内容,如果未能解决你的问题,请参考以下文章

CoreData Context合并后如何获取对象

js 数组对象根据相同value的key合并两个对象

在Angular 2中合并对象[重复]

js合并对象

合并熊猫 groupBy 对象

js数组对象相同项合并处理