原生js方法小记

2023-11-10

ps: 无框架时, 使用js的一些功能完成一些小demo
记录方法,方便自己查询

原生js方法小记

String 和Array 方法

替换所有

	//追加replaceAll方法
	String.prototype.replaceAll = function (s1, s2) {
		return this.replace(new RegExp(s1, "gm"), s2);
	}

根据回车切割为数组

 let strArr = strData.split("\n")

文本转Excel

    // 分割excel,split中的文本为excel特殊分隔符
    const excelSplit = (v) => {
        return v.split(`	`)
    }

去除所有空格

    // 去除所有空格
    const removeSpaces = (str) => {
        str = str.trim();
        str = str.replace(/\s/g, "")
        return str;
    }

追加包含方法

  //追加constains方法
	String.prototype.constains = function (v) {
		return this.indexOf(v) === -1 ? false : true;
	}
	//追加constains方法  忽略大小写
	String.prototype.constainsIgnoreCase = function (v) {
		var a = this.toUpperCase();
		var b = v.toUpperCase();
		return a.indexOf(b) === -1 ? false : true;
	}

获取方法注释

/*获取多行注释内内容*/
	Function.prototype.getMultiLine = function () {
		var lines = new String(this);
		lines = lines.substring(lines.indexOf("/*") + 3, lines.lastIndexOf("*/"));
		return lines;
	};

遍历

    # foreach
    arr.forEach(p => {
         let point = p.getCoordinates()
         s += `${point[0]}	${point[1]}\n`
    })
    # map
    datas.map((item, key) => {

    })        

获取2个数组的不同值

//两个数组中筛选不同值
function diff(arr1, arr2) {
  var newArr = [];
  var arr3 = [];
  for (var i=0;i<arr1.length;i++) {
    if(arr2.indexOf(arr1[i]) === -1)   
      arr3.push(arr1[i]);
  }
   var arr4 = [];
  for (var j=0;j<arr2.length;j++) {
    if(arr1.indexOf(arr2[j]) === -1)
      arr4.push(arr2[j]);
  }
   newArr = arr3.concat(arr4);
  return newArr;
}

Object方法

随机数字

const randomNum= function (Min, Max) {
				var Range = Max - Min;
				var Rand = Math.random();
				return (Min + Math.round(Rand * Range));
			}

判断null 及转换

//判断元素是否未定义
	utils.isUndef = function (v) {
		return v === undefined || v === null;
	}
	//判断元素是否定义
	utils.isDef = function isDef(v) {
		return v !== undefined && v !== null
	}
	//判断元素是否为true
	utils.isTrue = function (v) {
		return v === true
	}
	//判断元素是否为false
	utils.isFalse = function (v) {
		return v === false
	}
	// 转换toString
	utils.toString = function (val) {
		return val == null ? '' : typeof val === 'object' ? JSON.stringify(val, null, 2) : String(val)
	}
	//转换toNumber
	utils.toNumber = function (val) {
		var n = parseFloat(val);
		return isNaN(n) ? val : n
	}

uuid

const uuid = function () {
		function formatDateTime() {
			var date = new Date();
			var y = date.getFullYear();
			var m = date.getMonth() + 1;
			m = m < 10 ? ('0' + m) : m;
			var d = date.getDate();
			d = d < 10 ? ('0' + d) : d;
			var h = date.getHours();
			var minute = date.getMinutes();
			var second = date.getSeconds();
			return y + m + d + h + minute + second;
		}
		var uuid = formatDateTime() + Math.random().toString(36).substr(2);
		return uuid;
	}

// 方式2	
 uuid: (simple = false) => {
    function S4() {
      return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1)
    }
    if (simple) {
      return (S4() + S4() + S4())
    } else {
      return (S4() + S4() + '-' + S4() + '-' + S4() + '-' + S4() + '-' + S4() + S4() + S4())
    }
  },

Date方法

追加格式化

	// 追加日期格式化
	Date.prototype.format = function (format) {
		/*
		 * eg:format="yyyy-MM-dd hh:mm:ss";
		 */
		var o = {
			"M+": this.getMonth() + 1, // month
			"d+": this.getDate(), // day
			"h+": this.getHours(), // hour
			"m+": this.getMinutes(), // minute
			"s+": this.getSeconds(), // second
			"q+": Math.floor((this.getMonth() + 3) / 3), // quarter
			"S+": this.getMilliseconds()
			// millisecond
		}

		if (/(y+)/.test(format)) {
			format = format.replace(RegExp.$1, (this.getFullYear() + "").substr(4
				- RegExp.$1.length));
		}

		for (var k in o) {
			if (new RegExp("(" + k + ")").test(format)) {
				var formatStr = "";
				for (var i = 1; i <= RegExp.$1.length; i++) {
					formatStr += "0";
				}

				var replaceStr = "";
				if (RegExp.$1.length == 1) {
					replaceStr = o[k];
				} else {
					formatStr = formatStr + o[k];
					var index = ("" + o[k]).length;
					formatStr = formatStr.substr(index);
					replaceStr = formatStr;
				}
				format = format.replace(RegExp.$1, replaceStr);
			}
		}
		return format;
	}

比较日期

 // yyyy-mm-dd格式比较
  compareTime: (startDate, endDate) => {
    var date1 = strFormatDate(startDate)
    var date2 = strFormatDate(endDate)
    if (date1.getTime() > date2.getTime()) {
      return false
    } else {
      return true
    }
    function strFormatDate(str) {
      return new Date(Date.parse(str.replace(/-/g, '/')))
    }
  }

Tree方法

tree转数组

 /**
   *
   * tree转数组
   * @param {*} list
   * @param {*} [newArr=[]]
   * @returns {*}
   */
  const treeToArray = (list, newArr = []) => {
    list.forEach((item) => {
      const { children } = item
      if (children) {
        newArr.push(item)
        return treeToArray(children, newArr)
      }
      newArr.push(item)
    })
    return newArr
  }

获取父节点key

/**
   * 获取tree 中key的父节点
   * @param {*} key
   * @param {*} tree
   * @returns
   */
  const getParentKey = (key, tree) => {
    let parentKey
    for (let i = 0; i < tree.length; i++) {
      const node = tree[i]
      if (node.children) {
        if (node.children.some(item => item.key === key)) {
          parentKey = node.key
        } else if (getParentKey(key, node.children)) {
          parentKey = getParentKey(key, node.children)
        }
      }
    }
    return parentKey
  }

遍历树

/**
   *
   * 遍历查找key
   * @param {*} data 数组
   * @param {*} key  key
   * @param {*} callback  回调函数
   */
  const loop = (data, key, callback) => {
    data.forEach((item, index, arr) => {
      if (item.key === key) {
        return callback(item, index, arr)
      }
      if (item.children) {
        return loop(item.children, key, callback)
      }
    })
  }

Ajax方法

测试跨域(基于get请求)


var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://192.168.101.10:9001/proxyHttp/getKkxx');
xhr.send(null);
xhr.onload = function(e) {
    var xhr = e.target;
    console.log(xhr.responseText);
}

post-form请求

var httpRequest = new XMLHttpRequest();//第一步:创建需要的对象
httpRequest.open('POST', 'url', true); //第二步:打开连接
httpRequest.setRequestHeader("Content-type","application/x-www-form-urlencoded");//设置请求头 注:post方式必须设置请求头(在建立连接后设置请求头)
httpRequest.send('name=teswe&ee=ef');//发送请求 将情头体写在send中

httpRequest.onreadystatechange = function () {//请求后的回调接口,可将请求成功后要执行的程序写在其中
    if (httpRequest.readyState == 4 && httpRequest.status == 200) {//验证请求是否发送成功
        var json = httpRequest.responseText;//获取到服务端返回的数据
        console.log(json);
    }
};

post-json请求

var httpRequest = new XMLHttpRequest();//第一步:创建需要的对象
httpRequest.open('POST', 'url', true); //第二步:打开连接/***发送json格式文件必须设置请求头 ;如下 - */
httpRequest.setRequestHeader("Content-type","application/json");//设置请求头 注:post方式必须设置请求头(在建立连接后设置请求头)var obj = { name: 'zhansgan', age: 18 };
httpRequest.send(JSON.stringify(obj));//发送请求 将json写入send中

httpRequest.onreadystatechange = function () {//请求后的回调接口,可将请求成功后要执行的程序写在其中
    if (httpRequest.readyState == 4 && httpRequest.status == 200) {//验证请求是否发送成功
        var json = httpRequest.responseText;//获取到服务端返回的数据
        console.log(json);
    }
};

clipboard 方法

复制至粘贴板

# 写入到粘贴板
navigator.clipboard.writeText(text)

# 复制动作
 const inputEle = document.querySelector("#input");
 inputEle.select(); 
 document.execCommand("copy");

读取粘贴板内容

function paste() {
  navigator.clipboard // 创建clipboard对象
    .readText() // 调用readText()方法
    .then((clipText) => {
      // 成功回调 
      console.log(clipText); // clipText是从剪贴板读取到的内容(也就是要粘贴的内容)
    })
    .catch((err) => console.log("粘贴失败!",err)); // 失败回调
}

Url方法

获取请求参数


const getUrlParam = function (name) {
		var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
		var r = window.location.search.substr(1).match(reg);
		if (r !== null) {
			return decodeURI(r[2]);
		} else {
			return r;
		}
	}

//TODO
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

原生js方法小记 的相关文章

  • 如何在后台加载图像?

    问题 我正在创建一个专辑 所以每次按 时间 下一个 按钮我正在加载新图像 我想要实现的是 只有在新图像从服务器完全下载后 我才想从旧图像切换到新图像 实际上我不想在加载时显示部分图像 有什么解决办法吗 PS 类似的问题 https stac
  • Android 上的 setTimeOut() 相当于什么?

    我需要等效的代码setTimeOut call function milliseconds 对于安卓 setTimeOut call function milliseconds 您可能想查看定时任务 http developer andro
  • React 测试库:当输入表单上的 fireEvent 更改时,给定元素没有值设置器

    我想改变的值材质用户界面 https material ui com components text fields TextField在反应测试库中 我已经设置了 data testid 然后使用getByTestId我拿起了输入元素 th
  • .getDay() 奇怪的行为[重复]

    这个问题在这里已经有答案了 有一个例子 console log new Date 2013 02 24 getDay 24 gt 0 24 console log new Date 2013 02 25 getDay 25 gt 1 25
  • 如何获取 CSS 旋转元素的实际(非原始)高度

    我需要获取几个不同元素的实际高度 为了精确的自定义工具提示定位 并且其中一些元素 不是全部 被旋转 elem outerHeight 返回原始高度 而不是实际显示的高度 这是一个非常简单的例子 http jsfiddle net NPC42
  • Mocha / Chai Expect.to.throw 未捕获抛出的错误

    我在获取 Chai 时遇到问题expect to throw测试我的 node js 应用程序 测试在抛出的错误上不断失败 但是如果我将测试用例包装在 try 和 catch 中 并对捕获的错误进行断言 它就会起作用 Does expect
  • Internet Explorer 的数组indexOf 实现

    有很多关于如何将 indexOf 实现放入数组原型中以便它可以在 Internet Explorer 下工作的解决方案 但是我偶然发现了一个问题 到目前为止我所看到的任何地方似乎都没有解决这个问题 使用非常一致的MDC 的实施 https
  • 如何从回调函数中获取值

    我对 javascript 比较陌生 并且面临一些困难 我有两个 java 脚本文件 如下所示 我无法获取变量的值条目标题在 getRss 函数内并将其存储在变量内Rss1 标题 and Rss2 标题 创建一个全局变量并将其分配给条目标题
  • JavaScript/Angular 1 - Promise.all 到 async-await

    我在两个变量中分配了对 Web 服务的两次调用referencesPromise and contactTypesPromise onInit 如果需要 我可以为此创建一个新方法 onInit const referencesPromise
  • 不明白为什么 Chrome/Safari 无法在此处获取 ScrollHeight

    我只是问了一个问题 为什么某些 js 代码不能 100 在 Chrome 和 Safari 中工作 但经过更多故障排除后 我想我发现这是我应该发布的问题 我有一个页面 其中有一个表单 该表单的目标是同一页面上的 iframe iframe
  • 如何切换整个页面的深色主题?

    我已经成功地在 html 和 Flask 中按下复选框时切换深色主题和浅色主题 但是我怎样才能让深色主题覆盖整个页面 而不仅仅是一些 div 元素呢 边距仍然是浅色主题 CSS代码如下 container display flow widt
  • 如何使 Loopback 模型事件起作用?

    我尝试过一个例子http apidocs strongloop com loopback model http apidocs strongloop com loopback model MyModel on changed functio
  • 调整发散堆积条形图以使用通用更新模式

    我一直在使用可用的堆积条形图示例here https bl ocks org mbostock b5935342c6d21928111928401e2c8608使用以下代码 var data month Q1 2016 apples 384
  • JavaScript 将 NULL 转换为 0

    我正在使用 jQuery 来获取元素的高度 但如果该元素不存在 以下代码将返回 NULL height menu li active ul height returns integer or null 这是一种跨浏览器安全的方法 可以使用以
  • Google Apps 脚本:如何水平对齐 inlineImage

    我有以下代码 它是一个更大程序的一部分 我正在尝试将图像从我的 Google 驱动器插入到 Google 文档中 并调整其大小并居中 到目前为止 我能够让程序插入图像并调整其大小 但我不知道如何使 inlineImage 居中 我是使用谷歌
  • Web 扩展中共享 vuex 状态(死对象问题)

    我正在尝试在网络扩展中使用共享的 vue js 状态 状态存储在后台脚本的 DOM 中并呈现在弹出页面中 第一次尝试 我的第一次尝试是使用一个没有 vuex 的简单商店 背景 js var store count 0 popup js br
  • 动态多个延迟 jQuery Ajax 调用

    使用 jQuery 的延迟模式http api jquery com jQuery when http api jquery com jQuery when 我正在尝试进行多个 jsonp ajax 调用并等待结果 然后再进行下一步 我可以
  • 将回调函数与原型函数一起使用

    在执行回调时 我无法弄清楚如何传递对象方法而不是排序 通用原型 方法 function Client this name hello Client prototype apiCall function method params callb
  • 使用 Java 进行 AES 加密并使用 Javascript 进行解密

    我正在制作一个需要基于 Java 的 AES 加密和基于 JavaScript 的解密的应用程序 我使用以下代码作为基本形式进行加密 public class AESencrp private static final String ALG
  • 如何通过 jQuery onblur 提交表单

    所以我尝试通过 jQuery onblur 提交表单 即一旦焦点离开密码字段 表单就会通过 jQuery 提交 有类似的问题 但这不是我要找的 我尝试使用 document getElementById 但它不起作用 任何帮助表示赞赏 提前

随机推荐

  • ST7796S MIPI单通道, 320x480初始化代码

    ST7796S MIPI单通道接口 320x480分辨率初始化代码 代码示例 loadWidthSet 320 loadHeightSet 480 loadHBPSet 180 loadVBPSet 20 loadHFPSet 20 loa
  • 【C语言】统计素数并求和

    改名字了 2022 2 26之前叫 回到正题 由题可知 题目要求在用户自己输入的定整数M和N区间内求出素数的个数 并且对他们求和 要想解决编程题目 首先要知道题目问的是什么 素数一般指质数 质数是指在大于1的自然数中 除了1和它本身以外不再
  • 版本控制之最佳实践(Git版)

    现如今 应该每个开发者都在使用版本控制工具了吧 然而 如果你理解版本控制的基本规则 你便能更好地发挥它的效用 在此 我们汇总了一些最佳实践 希望你在使用Git做版本控制时能够了然于心 得心应手 1 相关的改动才放一起提交 一次提交 git
  • hi35 web服务器

    在hi3516A上移植好的boa嵌入式web服务器代码 boa有61k 一次只能处理一个请求 https download csdn net download ganxiaoyagn000 9239729 appweb Appweb 6 1
  • android 11 存储权限,Android 11存储权限强制申请

    private static final int REQUEST CODE 1024 private void requestPermission if Build VERSION SDK INT gt Build VERSION CODE
  • OC中的基本容器和基本数据类型

    基本数据类型 NSRange 是一个结构体 里面有两个数据成员数据类型都为NSUInteger 就是c语言中的无符号整形 一个是location表示集合的起始地址 另外一个变量是length表示从起始地址开始算多少个元素 NSRange的三
  • CTF-web 简介

    web部分是CTF的重要组成部分之一 素有WEB大魔王之称 题目种类繁多 关键是如何发现漏洞的类型和怎样构造特殊的负载绕过过滤 CTF分为三种模式 解题模式 攻防模式 混合模式 在线工具 https www ctftools com dow
  • JVM运行时数据区

    文章目录 JVM内存结构图 1 运行时数据区域 JDK 1 7 JDK 1 8 1 线程栈 虚拟机栈 2 本地方法栈 3 程序计数器 4 方法区 元空间 5 堆 6 运行时常量池 Runtime Constant Pool 7 直接内存 D
  • 新版MetaMask如何获取当前账户地址

    window addEventListener load async gt Modern dapp browsers if window ethereum let ethereum window ethereum window web3 n
  • C语言中 -> 和 . 的区别

    在C语言中 gt 和 都是用于访问结构体 struct 成员的运算符 但它们的使用场景略有不同 1 gt 运算符用于访问结构体指针的成员 当你有一个指向结构体的指针时 你可以使用 gt 运算符来访问该结构体的成员 例如 struct Per
  • Linux使用第三方库链接的使用方式——静态式

    目录 二 第三方库为静态库时 方法1 两个窗口去分别模拟两个窗口公司A 客户端 公司B 服务端 的视角案例实现 提前插播一条指令 生成静态库文件的指令 方法2 优化 该方法在上述方法1的第10步后开始进行 这里强调一个问题 今天我们来学习将
  • 记录一个AFR去嵌S参数异常的案例。

    最近在使用AFR去嵌一个S参数的时候 遇到了如下问题 首先介绍一下这个S参数 一端是MCIO连接器 另一端是CEM连接器 所以测试的时候一端接MCIO测试治具 一端接CEM测试治具 再通过线缆将测试治具连接到VNA上 我大概画了一个简图如下
  • Java 输出机制 数据类型 基本数据类型转换 基本数据类型和String类型的转换

    目录 一 输出机制 1 print和println的差别 2 可接收不同类型参数 3 输出函数中 符号的使用 二 数据类型 1 整型类型 2 浮点类型 3 字符类型 三 基本数据类型转换 1 自动类型转换 2 强制类型转换 3 练习题 四
  • 目标检测算法回顾之发展概览

    目标检测算法的发展时间线 发展历史轴 时间轴线图 算法方法概览 思维导图 说明 本文仅供学习 发展历史轴 时间轴线图 目标检测的算法发展可以追溯到很久之前 这里我根据前两年的综述论文加上这两年的发展也画了两个部分的相关模型发展轴 可以看到
  • linux命令之ssh详解

    ssh openssh套件中的客户端连接工具 Linux在线工具 linux命令在线工具 个人博客网站 博客 Java17中文文档 JDK17中文手册 Gradle8 1 1中文文档 Gradle中文文档 补充说明 ssh命令 是opens
  • (转载)Linux 系统内核的调试

    调试是软件开发过程中一个必不可少的环节 在 Linux 内核开发的过程中也不可避免地会面对如何调试内核的问题 但是 Linux 系统的开发者出于保证内核代码正确性的考虑 不愿意在 Linux 内核源代码树中加入一个调试器 他们认为内核中的调
  • PHP实现微信小程序状态检测(违规、暂停服务、维护中、正在修复)

    实现原理 进入那些状态不正常的小程序会被重定向至一个Url 使用抓包软件抓取这个Url 剔除不必要参数 使用cURl函数请求网页获得HTML内容 根据内容解析出当前APPID的小程序的状态 代码
  • thrust库学习(一) —— cub::DeviceRadixSort

    1 cub DeviceRadixSort 1 1 介绍 DeviceRadixSort提供设备范围内的并行操作 用于跨驻留在设备可访问内存中的数据项序列计算基数排序 基数排序方法按升序 或降序 排列项目 该算法依赖于键的位置表示 即每个键
  • LeetCode-动态规划-路径的数目

    1 题目 剑指 Offer II 098 路径的数目 62 不同路径 2 实现 class Solution public vector
  • 原生js方法小记

    ps 无框架时 使用js的一些功能完成一些小demo 记录方法 方便自己查询 原生js方法小记 String 和Array 方法 替换所有 追加replaceAll方法 String prototype replaceAll functio