<<Nodejs>> 一些方法总结备份1

<<循环中等待异步>>

function setAgvList() {
  const commonAgv = async() => {
    for (var agvCount = 0; agvCount < groupConst.ScheduleConfig.MaxAgvCount; agvCount++) {
      var agvName = await agvMissStatus.getRobotByIndex(agvCount)
      var agvStatus = {
        robotIndex: agvCount,
      }
      GParamGroup.UseAgvList.push(agvStatus)
    }
    console.log(‘---------UseAgvList---------‘)
    console.log(GParamGroup.UseAgvList)
  }
  commonAgv()
}

<<数组去重>>

数组去重的方法
function dedupe(array) {
  return [...new Set(array)]
}
var arr = [1,2,2,3,3,4,4,5,5]
console.log(dedupe(arr))

<<深拷贝>>

1(在nodeJS项目中,有一个lodash模块,我们可以利用它提供的方法来实现深度克隆,或者将其下载到本地,引入它对应的js文件也可如下)
lodash中文网 https://www.lodashjs.com/docs/latest

const cloneDeep = require(‘lodash/clonedeep‘)
// スケジュールステータス初期化
function setScheduleList() {
  for (var index = 0; index < groupConst.ScheduleConfig.ScheduleMaxRunCount; index++) {
    // 深いCopy
    GParamGroup.ScheduleObj.missionParams = cloneDeep(missionParams)
    var obj = cloneDeep(GParamGroup.ScheduleObj)
    obj.index = index
    GParamGroup.ScheduleList.push(obj)
    GParamGroup.changeMainState(index, GStatus.GMainState.GStart)
  }
  console.log(‘ScheduleList ‘, GParamGroup.ScheduleList)
}
方法2(JSON.parse和JSON.stringify)
async function bAgvMoveEvNode (missionModuleParam) {
  mModuleParam = JSON.parse(JSON.stringify(missionModuleParam))
  startFlow()
}
// 3. 构造一个深拷贝函数
function deepClone(obj) {
    var result = Array.isArray(obj) ? [] : {}; // 判断当前传进来的是对象还是数组
    for(var key in obj) {
        if (obj.hasOwnProperty(key)) { // 该key是否存在
            if (typeof obj[key] === ‘object‘ && obj[key] !== null) { // obj[key]如果为object,递归调用该方法,obj[key] = arr || obj[key] = {}都为‘object‘
                result[key] = deepClone(obj[key]);
            } else {
                result[key] = obj[key];
            }
        }
    }
    return result;
}
4 遍历实现数组的多层深拷贝
var arr = [1,2,3,4,5]
var arr2 = copyArr(arr)
function copyArr(arr) {
    let res = []
    for (let i in arr) {
     res.push(arr[i])
    }
    return res;
}

<<浅拷贝>>

浅拷贝,双向改变,指向同一片内存空间

1 直接赋值
var arr1 = [1, 2, 3];
var arr2 = arr1;
arr1[0] = ‘change‘;
console.log(‘shallow copy: ‘ + arr1 + " );   //shallow copy: change,2,3
console.log(‘shallow copy: ‘ + arr2 + " );   //shallow copy: change,2,3

所以把它放在深拷贝里,是因为它看起来像是深拷贝。而实际上它是浅拷贝。原数组的元素会按照下述规则拷贝:·

如果该元素是个对象引用 (不是实际的对象),slice 会拷贝这个对象引用到新的数组里。两个对象引用都引用了同一个对象。如果被引用的对象发生改变,则新的和原来的数组中的这个元素也会发生改变。

对于字符串、数字及布尔值来说(不是 String、Number 或者 Boolean 对象),slice 会拷贝这些值到新的数组里。在别的数组里修改这些字符串或数字或是布尔值,将不会影响另一个数组。

1.slice 方法实现数组的单层深拷贝
将原数组中抽离部分出来形成一个新数组。我们只要设置为抽离全部,即可完成数组的深拷贝。代码如下:
var arr = [1,2,3,4,5]
var arr2 = arr.slice(0)
arr[2] = 5
console.log(arr)
console.log(arr2)
2 concat 方法实现数组的一层深拷贝
原理更加粗暴 它是用于连接多个数组组成一个新的数组的方法。那么,我们只要连接它自己,即可完成数组的深拷贝。代码如下:
var arr = [1,2,3,4,5]
var arr2 = arr.concat()
arr[2] = 5
console.log(arr)
console.log(arr2)
如果向两个数组任一中添加了新元素,则另一个不会受到影响。例子如下:

var array = [1,2,3];
var array_shallow = array;
var array_concat = array.concat();
var array_slice = array.slice(0);
console.log(array === array_shallow); //true
console.log(array === array_slice); //false,“看起来”像深拷贝
console.log(array === array_concat); //false,“看起来”像深拷贝
可以看出,concat和slice返回的不同的数组实例,这与直接的引用复制是不同的。而从另一个例子可以看出Array的concat和slice并不是真正的深复制,数组中的对象元素(Object,Array等)只是复制了引用。如下:

var array = [1, [1,2,3], {name:"array"}];
var array_concat = array.concat();
var array_slice = array.slice(0);
array_concat[1][0] = 5;  //改变array_concat中数组元素的值
console.log(array[1]); //[5,2,3]
console.log(array_slice[1]); //[5,2,3]
array_slice[2].name = "array_slice"; //改变array_slice中对象元素的值
console.log(array[2].name); //array_slice
console.log(array_concat[2].name); //array_slice

原文地址:https://www.cnblogs.com/liusj/p/12375984.html

时间: 2024-10-13 17:28:58

<<Nodejs>> 一些方法总结备份1的相关文章

Mysql导入导出大量数据的方法、备份恢复办法

经常使用PHP+Mysql的朋友一般都是通过phpmyadmin来管理数据库的.日常的一些调试开发工作,使用phpmyadmin确实很方便.但是当我们需要导出几百兆甚至几个G的数据库时,phpmyadmin就会很卡.甚至如果你是想导入大量数据,则phpmyadmin完全无法完成.因为phpmyadmin是基于PHP网页的,无法上传太大的sql文件.其实mysql官方给了我们很好的解决方案:mysqldump. 下面介绍,如何在Windows环境下,使用mysqldump导出数据库: 找到你mys

Nodejs 调试方法

这两天鼓捣了一下node项目,记录一下node的调试方法. 前端开发的调试可以用打日志(console.log)或者断点调试(debugger;配合Chrome或firebug)甚至IDE(webstorm)来调试. Node也差不多. 打日志 console.dir,console.log,引入 asserts 模块,对调试区域进行debug等方法, 这种方法平时检测一下还是可以的,真正有难缠的bug的时候会有种暴力穷举的感觉. 断点调试 断点调试也有几种方法 a.Node.js内置调试工具

Linux(Debian)下Nodejs安装方法

一:安装node.js 1.在官方网站下载 http://www.nodejs.org/download/ 下载后,在/home/hongwei有一个文件node-v0.10.32-linux-x86.tar.gz ,将其解压后,文件夹为 node-v0.10.32-linux-x86, 2.查看版本 cd node-v0.10.32-linux-x86 ls ./node -v 查看版本是 v0.10.32 3.将其建立建立链接 ln -s /home/hongwei/node-v0.10.3

为mysql寻找最佳备份方法和备份

一.为什么要备份? 灾难恢复 需求改变 测试 二.事先考虑的问题 可以容忍丢失多长时间的数据? 恢复要在多长时间内完成? 是否需要持续提供服务? 需要恢复什么,整个数据库服务器?单个数据库?一个或多个表?某个语句? 三.备份类型 根据是否需要数据库离线分为: 冷备:coldbackup,关闭mysql服务,或不允许读写请求 温备:warmbackup,备份的同时仅支持读请求 热备:hotbackup,备份的同时,业务功能不受影响,需要工具和数据库引擎支持 根据要备份的数据范围可分为: 完全备份:

NVM安装nodejs的方法

安装nodejs方式有很多种. 第一种:官网下载 ?通过nodejs官网下载安装 ,但有个缺陷,不同版本的nodejs无法顺利的切换. 第二种: NVM安装 ?NVM可以帮助我们快速切换 node版本.但是安装NVM过程中有很多坑,网上找了很多文档都没解决问题.这里自己总结下,帮助大家顺利安装软件. 一. 下载nvm安装包 1 下载地址 ?github上下载最新版本:https://github.com/coreybutler/nvm-windows/releases ?推荐下载第三个包:nvm

nodejs url方法

ulrl方法 url.format(urlObj)   //将对象装换成url url.parse(urlStr[, parseQueryString][, slashesDenoteHost]) //将链接解析为对象 url.resolve(from, to)  

Nodejs版本管理方法

简介 我以前写过关于Nodejs的版本管理那个时候使用的是n来管理,但是n会在home目录下创建的安装目录不是隐藏的,所以对于我这个强迫症来说就很烦,所以现在就来说说nvm这个nodejs的版本管理工具 安装 安装很简单,一个命令搞定 使用curl安装: curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash 使用wget安装: wget -qO- https://raw.github

nodeJs基础方法

Node.js 是一个基于Chrome javascript 运行时建立的一个平台, 用来方便地搭建快速的 易于扩展的网络应用 Node.js 借助事件驱动, 非阻塞I/O 模型变得轻量和高效, 非常适合 运行在分布式设备 的 数据密集型 的实时应用 Node.js是一个可以快速构建网络服务及应用的平台[2] .该平台的构建是基于Chrome's JavaScript runtime,也就是说,实际上它是对Google V8引擎(应用于Google Chrome浏览器)进行了封装. V8引擎执行

使用CopyTable工具方法在线备份HBase表

CopyTable is a simple Apache HBase utility that, unsurprisingly, can be used for copying individual tables within an HBase cluster or from one HBase cluster to another. In this blog post, we'll talk about what this tool is, why you would want to use