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

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

持续更新中...

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

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

获取 24 小时制的时间

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

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

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

数组元素随机打乱

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

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

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

数组去重

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

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

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

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

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

JS 数组、对象的深拷贝

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

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

获取当前 URL 截取参数对象

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

生成随机 16 进制颜色

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

间歇调用和超时调用

setInterval()、setTimeout()

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

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

使用 setTimeout 代替 setInterval

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

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

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

所以最好使用 setTimeout 代替 setInterval

小技巧

&& 运算符

true && 12 // 返回 12
false && 12 // 返回 false

|| 运算符

false || 12 // 返回 12
true || 12 // 返回 true

以下输出 1 3

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

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

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

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

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

Lodash

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

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

使用理由:

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

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

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

例如:

// 只需要拷贝对象里特定的某几个值
var object = { 'a': 1, 'b': '2', 'c': 3 }; _.pick(object, ['a', 'c']);
// => { '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. Flume监控指标项

    配置监控 1.修改flume-env.sh export JAVA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmx ...

  2. Logstash动态模板映射收集Nginx的Json格式日志

    Logstash传输给ES的数据会自动映射为5索引,5备份,字段都为text的的索引.这样基本上无法进行数据分析.所以必须将Logstash的数据按照既定的格式存储在ES中,这时候就要使用到ES模板技 ...

  3. revit 碰撞检测相关

    Revit二次开发:由房间获取房间的墙     之前用的方法是由房间边界构成的Solid,计算与该Solid相交的Element,然后判断是否为墙.相对来说这个方法比较通用,可以检索出房间的楼板.窗户 ...

  4. JAVA 创建也项目平级文件

    String url = System.getProperty("user.dir") +"/logs/test.txt" File file = new Fi ...

  5. LeetCode 108. Convert Sorted Array to Binary Search Tree (将有序数组转换成BST)

    108. Convert Sorted Array to Binary Search Tree Given an array where elements are sorted in ascendin ...

  6. /bin/sh^M:解释器错误:没有那个文件或目录

    在win下编辑的时候,换行结尾是\n\r , 而在linux下 是\n,所以才会有 多出来的\rsed -i 's/\r$//' configure 删除configure脚本中的\r

  7. 更换yum源为阿里云源

    1.复制备份: cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2.下载: wget -O ...

  8. 【转】深入理解javascript中的立即执行函数(function(){…})()

    javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花,当然,能理解各型各色的写法也是对javascript语言特性更进一步的深入理解. ( f ...

  9. Linux字符设备驱动实例—globalmem驱动

    1.globalmem虚拟设备实例 globalmem为“全局内存”的意思,在globalmem字符设备中会分配一片大小为GLOBALMEM_SIZE(4KB)的内存空间,并在驱动中提供对这片内存的读 ...

  10. base64与图片输出屏幕

    if ($base64) { ob_start(); // 输出图像 imagepng($this->_image); imagedestroy($this->_image); $imag ...