JavaScript中Object值合并方法

前言:在日常开发工作中我们可能会遇到js中对象中所有值的复制工作,也有可能是通过electron开发客户端,改版时候面临到的设置合并问题。那么本文将对此做一个简要解决方案的叙述。

介绍:比如有obj1, obj2,我们需要将obj1中的所有与obj2中相同字段相同深度的值copy给obj2,并且需要保持obj2字段结构不变,调用一下方法即可(采用ES6写法)。

 1 /**
 2          * 将src中的数据copy到dist中,并保留dist的结构
 3          * @param src
 4          * @param dist
 5          */
 6         copyValue(src, dist) {
 7             if (!src || typeof(src) !== ‘object‘ || typeof(dist) !== ‘object‘){
 8                 return ;
 9             }
10
11             let keys = Object.keys(dist)
12             if (keys && keys.length > 0 && isNaN(keys[0])){
13                 keys.forEach(key => {
14                     let value = dist[key]
15                     let srcVal = src[key]
16
17                     // 判断是不是对象,如果是则继续遍历,不是则开始赋值或忽略
18                     if (value !== undefined && typeof(value) === ‘object‘ && srcVal && typeof(srcVal) === ‘object‘ && srcVal[0] === undefined){
19                         copyValue(srcVal, value)
20                     } else if (value !== undefined && srcVal && typeof(value) == typeof (srcVal)){
21                         // 如果源数据存在,并且类型一致,则开始赋值
22                         dist[key] = src[key]
23                     }
24                 })
25             }
26
27         },

谢谢收看,我是fullstackyang!

时间: 2024-11-02 09:41:12

JavaScript中Object值合并方法的相关文章

JavaScript中Object.prototype.toString方法的原理

在JavaScript中,想要判断某个对象值属于哪种内置类型,最靠谱的做法就是通过Object.prototype.toString方法. ? 1 2 var arr = []; console.log(Object.prototype.toString.call(arr)) //"[object Array]" 本文要讲的就是,toString方法是如何做到这一点的,原理是什么. ECMAScript 3 在ES3中,Object.prototype.toString方法的规范如下:

深入理解javascript中实现面向对象编程方法

介绍Javascript中面向对象编程思想之前,需要对以下几个概念有了解: 1. 浅拷贝和深拷贝:程序在运行过程中使用的变量有在栈上的变量和在堆上的变量,在对象或者变量的赋值操作过程中,大多数情况先是复制栈上的信息,这样就会出现以下情况,如果变量是对象,那么这一操作,复制的只是真正对象所在 的堆内存空间的起始地址,这就是所谓的浅拷贝,如果是深拷贝,则是在内存堆空间中重新分配一个内存,并把分配的内存的起始地址复制过去. 2. 引用类型数据和值类型数据:谈到引用类型数据和值类型数据,自然而然的联想到

Javascript中String的valueOf方法

今天看了Javascript的基础教程,其中说了一个关于typeof的问题.typeof运算符的作用就是返回一个变量的类型,如果变量是一个数字,则返回number. 如果是字符串,则返回string, 布尔类型则返回boolean, 函数则返回function, 如果变量是null或者其他Javascript对象,就返回object. 未定义就返回undefined. 如果要判断变量存在,而且是一个字符串的话:给出的判断语句是: if( (typeof unknownVariable != "u

URL地址中中文乱码详解(javascript中encodeURI和decodeURI方法、java.net.URLDecoder.encode、java.net.URLDecoder.decode)

引言: 在Restful类的服务设计中,经常会碰到需要在URL地址中使用中文作为的参数的情况,这种情况下,一般都需要正确的设置和编码中文字符信息.乱码问题就此产生了,该如何解决呢?且听本文详细道来. 1.  问题的引出 在Restful的服务设计中,查询某些信息的时候,一般的URL地址设计为: get /basic/service? keyword=历史 , 之类的URL地址. 但是,在实际的开发和使用中,确是有乱码情况的发生,在后台的读取keyword信息为乱码,无法正确读取. 2. 乱码是如

JavaScript中object和Object有什么区别

JavaScript中object和Object有什么区别,为什么用typeof检测对象,返回object,而用instanceof 必须要接Object呢 -------------------------------------------------------------------- 这个问题和我之前遇到的问题非常相似,我认为这里有两个问题需要解决,一个是运算符new的作用机制,一个是function关键字和Funtion内置对象之间的区别.看了一些前辈的博客和标准,这里帮提问者总结一

JavaScript中With 语句使用方法实例

内容导读: 有了 With 语句,在存取对象属性和方法时就不用重复指定参考对象,在 With 语句块中,凡是 JavaScript 不识别的属性和方法都和该语句块指定的对象有关.With 语句的语法格式如下所示: With Object { Statements } 对象指明了当语句组中对象缺省时的参考对象,这里我们用较为熟悉的 Document 对象对 With 语句举例.例如 当使用与 Document 对象有关的 write( )或 writeln( )方法时,往往使用如下形式: docu

javascript中call和apply方法

转:http://www.cnblogs.com/ArthurPatten/p/3335912.html 我们可以将call和apply看做是某个对象的方法,通过调用方法的形式来间接调用函数.call和apply的第一个实参是要调用函数的母对象,它是调用上下文,在函数体内通过this来获得对它的引用. 例如,如果要想以对象o的方法来调用函数f,可以按如下的方式使用call和apply方法: f.call(o); f.apply(o); 可以按如下的代码来理解: o.m = f; //将f存储为o

JavaScript中的indexOf使用方法

JavaScript中的indexOf使用方法 1.概述 indexOf大小写敏感,其中的O要大写 2.对于字符串而言 indexOf返回字符串第一次出现的位置,若没有出现返回-1 1 var str = "hello world"; 2 alert(str.indexOf("o"))//显示4 3 alert(str.indexOf("i"))//显示-1 3.对于数组而言 indexOf返回某个值在数组中第一次出现的索引,若没有出现返回-1

javascript中的数组排序——sort()方法

在JavaScript中的Array对象提供了一个sort()方法用于对数组中的元素进行排序. sort()方法简介 JavaScript中数组的sort()方法主要用于对数组的元素进行排序.其中,sort()方法有一个可选参数.但是,此参数必须是函数. 数组在调用sort()方法时,如果没有传参将按字母顺序(字符编码顺序)对数组中的元素进行排序,如果想按照其他标准进行排序,就需要进行传一个参数且为函数,该函数要比较两个值,并且会返回一个用于说明这两个值的相对顺序的数字. Array.sort(