博客地址:https://ainyi.com/49

记录一些数据处理需要的方法工具代码

持续更新中...

时间戳转与日期格式相互转换

  • 时间戳转换成日期格式
  1. function timestampToTime (timestamp) {
  2. // 时间戳为10位需*1000,时间戳为13位的话不需乘1000
  3. let dateTime = timestamp.toString().length > 10 ? timestamp : timestamp * 1000;
  4. let date = new Date(dateTime);
  5. let Y = date.getFullYear() + '-';
  6. let M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1) + '-';
  7. let D = (date.getDate()+1 < 10 ? '0'+date.getDate() : date.getDate()) + ' ';
  8. let h = (date.getHours()+1 < 10 ? '0'+date.getHours() : date.getHours()) + ':';
  9. let m = (date.getMinutes()+1 < 10 ? '0'+date.getMinutes() : date.getMinutes()) + ':';
  10. let s = (date.getSeconds()+1 < 10 ? '0'+date.getSeconds() : date.getSeconds());
  11. return Y+M+D+h+m+s;
  12. }
  13. let onTime = new Date().valueOf();
  14. timestampToTime(onTime) // "2019-04-29 14:54:35"
  • 日期格式转换成时间戳
  1. let date = new Date('2014-04-23 18:55:49:123');
  2. // 有三种方式获取
  3. let time1 = date.getTime();
  4. let time2 = date.valueOf();
  5. let time3 = Date.parse(date);
  6. console.log(time1); // 1398250549123
  7. console.log(time2); // 1398250549123
  8. console.log(time3); // 1398250549000

获取 24 小时制的时间

当前 toLocaleTimeString 方法只能获取到 12 小时制的时间('上午09:10:01' | '下午08:10:24')

这里给出 js 获取 24 小时制的时间

  1. var myDate = new Date()
  2. console.log(myDate.toLocaleTimeString('chinese', {hour12: false}));
  3. // 14:57:15

数组元素随机打乱

这是我看过最简洁的数组打乱方式了,利用数组的 sort 方法

sort 的具体用法见:https://ainyi.com/41

  1. function randomArray (arr) {
  2. return arr.sort(() => 0.5 - Math.random());
  3. }
  4. randomArray([1, 2, 3, 4, 5]) // [3, 4, 2, 1, 5]

数组去重

更多内容和方法看:https://ainyi.com/32

  1. function unique(arr){
  2. return [...(new Set(arr))];
  3. }
  4. unique([1,1,2,3,4,2,3,4,5,3,3,4]); // [1, 2, 3, 4, 5]

嵌套数组的合并,扁平化数组

更多内容和方法看:https://ainyi.com/19

  1. // toString、split、map (支持多维数组~~~写法简便,速度又快)
  2. // 全部是数字类型,重新映射 map,若是字符串类型就不用 map
  3. let newArr = [];
  4. let nowTime = new Date();
  5. newArr = arr.toString().split(',').map(item => +item);

JS 数组、对象的深拷贝

更多内容和方法看:https://ainyi.com/72

  1. // 使用 JSON.parse(JSON.stringify(obj))
  2. let a = [1, [2, {aa: 2}, [4]], {aa: 5, cc: { dd: 6 }}]
  3. let b = JSON.parse(JSON.stringify(a)) // 完美

获取当前 URL 截取参数对象

  1. // ?foo=bar&baz=bing => {foo: bar, baz: bing}
  2. let q = {};
  3. location.search.replace(/([^?&=]+)=([^&]+)/g,(_,k,v)=>q[k]=v);
  4. console.log(q); // {foo: bar, baz: bing}

生成随机 16 进制颜色

  1. '#' + Math.floor(Math.random() * 0xffffff).toString(16).padEnd(6, '0');

间歇调用和超时调用

setInterval()、setTimeout()

首先两个方法都会返回一个调用 ID,该 ID 表示当前的定时器,可用于将来取消该定时器的调用

  1. var timeoutId = setTimeout(()=>{}, 1000);
  2. var intervalId = setInterval(()=>{}, 1000);
  3. clearTimeout(timeoutId);
  4. clearInterval(intervalId);
  • 使用普通 setInterval
  1. let num = 0;
  2. let max = 10;
  3. let intervalId = null;
  4. function incrementNumber () {
  5. num++;
  6. // 如果执行次数达到了 max 设定的值,则取消尚未执行的调用
  7. if (num === max) {
  8. clearInterval(intervalId);
  9. alert('Done');
  10. }
  11. }
  12. // 追踪调用 ID,用于取消定时器
  13. intervalId = setInterval(incrementNumber, 500);

使用 setTimeout 代替 setInterval

  1. let num = 0;
  2. let max = 10;
  3. function incrementNumber () {
  4. num++;
  5. // 如果执行次数没有达到 max 设定的值,则就设置另外一次超时调用
  6. if (num < max) {
  7. setTimeout(incrementNumber, 500);
  8. } else {
  9. alert('Done');
  10. }
  11. }
  12. setTimeout(incrementNumber, 500);

可见,在使用超时调用 setTimeout 代替 setInterval 时,没有必要追踪调用 ID,因为在每次执行代码之后,如果不在设置另一次超时调用,调用就会自动停止

一般认为,使用 setTimeout 代替 setInterval 是一种最佳的间歇调用模式,在开发环境下,很少真正使用 setInterval,原因是后一个间歇调用可能会在前一个间歇调用结束之前启动。而使用 setTimeout 代替 setInterval,完全可以避免这一点

所以最好使用 setTimeout 代替 setInterval

小技巧

&& 运算符

  1. true && 12 // 返回 12
  2. false && 12 // 返回 false

|| 运算符

  1. false || 12 // 返回 12
  2. true || 12 // 返回 true

以下输出 1 3

  1. if([]==false){console.log(1)}; // true []==false
  2. if({}==false){console.log(2)}; // false
  3. if([]){console.log(3)} // true
  4. if([1]==[1]){console.log(4)} // 地址不一样
  1. [] == false; // 表达式为 true
  2. [] !== false; // 表达式为 true
  3. // 但是
  4. if ([]) { // 可以进入
  5. console.log(2); // 是可以打印的
  6. };
  7. if ({}) { // 可以进入
  8. console.log(2); // 是可以打印的
  9. };

判断是否为空数组,可以用 length

判断是否为空对象,可以用 JSON 序列化,JSON.stringify(obj) === '{}'

实际开发中,尽量避免使用 ==,要用就用全等 ===

  • 创建日历集合
  1. // 创建过去七天的数组
  2. [...Array(7).keys()].map(days => new Date(Date.now() - 86400000 * days));
  3. // 创建未来七天的数组,减号换加号
  4. [...Array(7).keys()].map(days => new Date(Date.now() + 86400000 * days));
  • 生成 11 位随机 ID
  1. // 生成长度为 11 的随机字母数字字符串
  2. Math.random().toString(36).substring(2);
  3. // "lr7fs27id3"
  • 创建特定大小的数组
  1. [...Array(3).keys()]
  2. // [0, 1, 2]

Lodash

推荐使用 Lodash 工具,这是一个一致性、模块化、高性能的 JavaScript 实用工具库

官方文档地址:https://www.lodashjs.com

使用理由:

Lodash 通过降低 array、number、objects、string 等等的使用难度从而让 JavaScript 变得更简单。

Lodash 的模块化方法 非常适用于:

  1. 遍历 array、object 和 string
  2. 对值进行操作和检测
  3. 创建符合功能的函数

例如:

  1. // 只需要拷贝对象里特定的某几个值
  2. var object = { 'a': 1, 'b': '2', 'c': 3 };
  3. _.pick(object, ['a', 'c']);
  4. // => { 'a': 1, 'c': 3 }

博客地址:https://ainyi.com/49

JavaScript 相关的工具代码的更多相关文章

  1. 加速编码的 JavaScript 库和工具

    JavaScript库是 一个提前写好的JavaScript文件库,它可以很容易的开发基于JavaScript的应用,特别是AJAX和一些其它的以web为中心的技术.运用JavaScript最基本的方 ...

  2. ESLint – 可扩展的 JavaScript & JSX 校验工具

    ESLint 是一个开源的 JavaScript 代码校验工具,最初是由 Nicholas C. Zakas 在2013年创建的.经常被用来发现问题的模式或代码,不符合特定的风格准则. ESLint ...

  3. 2017值得一瞥的JavaScript相关技术趋势

    2017值得一瞥的JavaScript相关技术趋势从属于笔者的Web 前端入门与工程实践,推荐阅读2016-我的前端之路:工具化与工程化获得更多关于2016年前端总结.本文主要内容翻译自,笔者对于每个 ...

  4. 前端开发自动化工作流工具,JavaScript自动化构建工具grunt、gulp、webpack介绍

    前端开发自动化工作流工具,JavaScript自动化构建工具grunt.gulp.webpack介绍 前端自动化,这样的一个名词听起来非常的有吸引力,向往力.当今时代,前端工程师需要维护的代码变得及为 ...

  5. JavaScript “跑马灯”抽奖活动代码解析与优化(一)

    最近的项目中做了一个"跑马灯"的抽奖特效插件.上篇文章已经分享过html和css 的相关知识.这篇文章主要分享一些 JavaScript 相关的知识.这几天在写这篇文章的时候,也顺 ...

  6. JavaScript自动化构建工具grunt、gulp、webpack介绍

    前端开发自动化工作流工具,JavaScript自动化构建工具grunt.gulp.webpack介绍 前端自动化,这样的一个名词听起来非常的有吸引力,向往力.当今时代,前端工程师需要维护的代码变得及为 ...

  7. 常见的页面效果,相关的js代码

    1.焦点图 $(document).ready(function(){ var i=0; var autoChange= setInterval(function(){ if(i<$(" ...

  8. javascript 元编程之-代码修改代码

    javascript 元编程之-代码修改代码 引言 重构代码是个体力活,特别是在确定重构方案后,剩下就是按方案调整代码,然后进行测试. 如何有好又快的调整到位代码,这是件不容易的事. 简单的代码,可以 ...

  9. 如何实现 javascript “同步”调用 app 代码

    在 App 混合开发中,app 层向 js 层提供接口有两种方式,一种是同步接口,一种一异步接口(不清楚什么是同步的请看这里的讨论).为了保证 web 流畅,大部分时候,我们应该使用异步接口,但是某些 ...

随机推荐

  1. MQTT研究之EMQ:【EMQX使用中的一些问题记录(3)】

    EMQX功能强大,但是帮助信息或者可用资料的确有限,遇到个问题,比较难找到处理的头绪,今天,我要记录的是,使用中出现EMQX宕机,但是呢,启动也启动不了. 今天记录的内容,就以操作EMQX 3.2.3 ...

  2. 带有Q_OBJECT的类要放在头文件的第一个类位置,否则可能无法moc

    如果头文件中有多个类,带有Q_OBJECT的类要放在头文件的第一个类位置,否则可能无法moc

  3. 【PHP】使用phpoffice/phpexcel导入导出数据

    本例以thinkphp5.1为例 包地址: https://packagist.org/packages/phpoffice/phpexcel 使用: composer require phpoffi ...

  4. delimiter关键字

    默认的sql语句以分号";"表示结束.mysql解释器每遇到一个分号,执行一段语句.可以通过delimiter更改语句结束符 mysql>delimiter &&am ...

  5. sizeof(类名字)

    析构函数,跟构造函数这些成员函数,是跟sizeof无关的,因为我们的sizeof是针对实例,而普通成员函数,是针对类体的,一个类的成员函数,多个实例也共用相同的函数指针,所以自然不能归为实例的大小. ...

  6. 前端与算法 leetcode 189. 旋转数组

    目录 # 前端与算法 leetcode 189. 旋转数组 题目描述 概要 提示 解析 算法 # 前端与算法 leetcode 189. 旋转数组 题目描述 189. 旋转数组 概要 把他当做一到简单 ...

  7. Idea Spring 、SpringBoot相关设置技巧

    1.Spring变量依赖注入出现红色波浪线 Could not autowire. No beans of 'UserMapper' type found. less... (Ctrl+F1) Che ...

  8. 027 SSM综合练习03--数据后台管理系统--product-list.jsp和main.jsp页面制作

    1.product-list.jsp页面制作 (1)创建一个product-list1.jsp文件,清空,只保留 <%@ page contentType="text/html;cha ...

  9. js实现图片资源转化成base64的各种场景

    网络上有很多片介绍通过js将图片转换成base64的文章,之所以再写这篇文章的原因时发现没有找到系统的介绍的文章,有的介绍如何实现本地项目的图片转码,有的介绍如何实现网络资源的图片转化,但是系统介绍的 ...

  10. day50——js补充

    day50 前端内容回顾 HTML 标签分类 块级标签:div p h1-h6 form hr br ul li ol table标签 内联标签:span a img label input sele ...