JavaScript的一些小技巧分享


Posted in Javascript onJanuary 06, 2021

数组去重

ES6提供了几种简洁的数组去重的方法,但该方法并不适合处理非基本类型的数组。对于基本类型的数组去重,可以使用... new Set()来过滤掉数组中重复的值,创建一个只有唯一值的新数组。

const array = [1, 1, 2, 3, 5, 5, 1] 
const uniqueArray = [...new Set(array)]; 
console.log(uniqueArray); 

> Result:(4) [1, 2, 3, 5]

这是ES6中的新特性,在ES6之前,要实现同样的效果,我们需要使用更多的代码。该技巧适用于包含基本类型的数组:undefined、null、boolean、string和number。如果数组中包含了一个object,function或其他数组,那就需要使用另一种方法。

除了上面的方法之外,还可以使用Array.from(new Set())来实现:

const array = [1, 1, 2, 3, 5, 5, 1] 
Array.from(new Set(array)) 

> Result:(4) [1, 2, 3, 5]

另外,还可以使用Array的.filter及indexOf()来实现:

const array = [1, 1, 2, 3, 5, 5, 1] 
array.filter((arr, index) => array.indexOf(arr) === index) 

> Result:(4) [1, 2, 3, 5]

注意,indexOf()方法将返回数组中第一个出现的数组项。这就是为什么我们可以在每次迭代中将indexOf()方法返回的索引与当索索引进行比较,以确定当前项是否重复。

确保数组的长度

在处理网格结构时,如果原始数据每行的长度不相等,就需要重新创建该数据。为了确保每行的数据长度相等,可以使用Array.fill来处理

let array = Array(5).fill(''); 
console.log(array); 
> Result: (5) ["", "", "", "", ""]

数组映射

不使用Array.map来映射数组值的方法。

const array = [ 
 { 
 name: '大漠', 
 email: 'w3cplus@hotmail.com' 
 }, 
 { 
 name: 'Airen', 
 email: 'airen@gmail.com'
 }] 
 const name = Array.from(array, ({ name }) => name) 
 
 > Result: (2) ["大漠", "Airen"]

数组截断

如果你想从数组末尾删除值(删除数组中的最后一项),有比使用splice()更快的替代方法。

例如,你知道原始数组的大小,可以重新定义数组的length属性的值,就可以实现从数组末尾删除值:

let array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
console.log(array.length) 
> Result: 10 

array.length = 4 
console.log(array) 
> Result: (4) [0, 1, 2, 3]

这是一个特别简洁的解决方案。但是,slice()方法运行更快,性能更好:

let array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; 
array = array.slice(0, 4); 
console.log(array); 

> Result: [0, 1, 2, 3]

过滤掉数组中的falsy值

如果你想过滤数组中的falsy值,比如0、undefined、null、false,那么可以通过map和filter方法实现:

const array = [0, 1, '0', '1', '大漠', 'w3cplus.com', undefined, true, false, null, 'undefined', 'null', NaN, 'NaN', '1' + 0] 
array.map(item => { 
 return item 
}).filter(Boolean) 

> Result: (10) [1, "0", "1", "大漠", "w3cplus.com", true, "undefined", "null", "NaN", "10"]

获取数组的最后一项

数组的slice()取值为正值时,从数组的开始处截取数组的项,如果取值为负整数时,可以从数组末属开始获取数组项。

let array = [1, 2, 3, 4, 5, 6, 7] 
const firstArrayVal = array.slice(0, 1) 
> Result: [1] 

const lastArrayVal = array.slice(-1) 
> Result: [7] 

console.log(array.slice(1)) 
> Result: (6) [2, 3, 4, 5, 6, 7] 

console.log(array.slice(array.length)) 
> Result: []

正如上面示例所示,使用array.slice(-1)获取数组的最后一项,除此之外还可以使用下面的方式来获取数组的最后一项:

console.log(array.slice(array.length - 1)) 
> Result: [7]

从数组中获取最大值和最小值

可以使用Math.max和Math.min取出数组中的最大小值和最小值:

const numbers = [15, 80, -9, 90, -99] 
const maxInNumbers = Math.max.apply(Math, numbers) 
const minInNumbers = Math.min.apply(Math, numbers) 

console.log(maxInNumbers) 
> Result: 90 

console.log(minInNumbers) 
> Result: -99

另外还可以使用ES6的...运算符来完成:

const numbers = [1, 2, 3, 4]; 
Math.max(...numbers) 
> Result: 4 

Math.min(...numbers) 
> Result: 1

以上就是JavaScript的一些小技巧分享的详细内容,更多关于JavaScript 小技巧的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
javascript实现的使用方向键控制光标在table单元格中切换
Nov 17 Javascript
ie浏览器使用js导出网页到excel并打印
Mar 11 Javascript
ExtJS4利根据登录后不同的角色分配不同的树形菜单
May 02 Javascript
javascript获取重复次数最多的字符
Jul 08 Javascript
javascript实现粘贴qq截图功能(clipboardData)
May 29 Javascript
基于Bootstrap实现tab标签切换效果
Apr 15 Javascript
js判断请求的url是否可访问,支持跨域判断的实现方法
Sep 17 Javascript
jQuery中animate的几种用法与注意事项
Dec 12 Javascript
React中ES5与ES6写法的区别总结
Apr 21 Javascript
js实现鼠标拖拽多选功能示例
Aug 01 Javascript
jquery实现自定义树形表格的方法【自定义树形结构table】
Jul 12 jQuery
一篇超完整的Vue新手入门指导教程
Nov 18 Vue.js
详解Vue2的diff算法
Jan 06 #Vue.js
如何利用JavaScript编写一个格斗小游戏
Jan 06 #Javascript
vuex的使用步骤
Jan 06 #Vue.js
一篇文章看懂JavaScript中的回调
Jan 05 #Javascript
原生js中运算符及流程控制示例详解
Jan 05 #Javascript
vue3.0中友好使用antdv示例详解
Jan 05 #Vue.js
基于Vue2实现移动端图片上传、压缩、拖拽排序、拖拽删除功能
Jan 05 #Vue.js
You might like
用PHP和ACCESS写聊天室(五)
2006/10/09 PHP
php实现从ftp服务器上下载文件树到本地电脑的程序
2009/02/10 PHP
php把session写入数据库示例
2014/02/26 PHP
Javascript与PHP验证用户输入URL地址是否正确
2014/10/09 PHP
php生成rss类用法实例
2015/04/14 PHP
php代码架构的八点注意事项
2016/01/25 PHP
PHP基于DOMDocument解析和生成xml的方法分析
2017/07/17 PHP
PHP应用跨时区功能的实现方法
2019/03/21 PHP
javascript instanceof,typeof的区别
2010/03/24 Javascript
javascript alert乱码的解决方法
2013/11/05 Javascript
JavaScript定义变量和变量优先级问题探讨
2014/10/11 Javascript
JavaScript判断用户是否对表单进行了修改的方法
2015/03/18 Javascript
jQuery调用ajax请求的常见方法汇总
2015/03/24 Javascript
Node.js中的流(Stream)介绍
2015/03/30 Javascript
Javascript中的数据类型之旅
2015/10/18 Javascript
一种新的javascript对象创建方式Object.create()
2015/12/28 Javascript
javascript小数精度丢失的完美解决方法
2016/05/31 Javascript
js通过指定下标或指定元素进行删除数组的实例
2017/01/12 Javascript
jQuery输入框密码的显示隐藏【代码分享】
2017/04/29 jQuery
angular实现IM聊天图片发送实例
2017/05/08 Javascript
JavaScript递归算法生成树形菜单
2017/08/15 Javascript
Vue实现远程获取路由与页面刷新导致404错误的解决
2019/01/31 Javascript
JS写滑稽笑脸运动效果
2020/05/28 Javascript
python删除不需要的python文件方法
2018/04/24 Python
解决tensorflow模型参数保存和加载的问题
2018/07/26 Python
Python二次规划和线性规划使用实例
2019/12/09 Python
Django认证系统user对象实现过程解析
2020/03/02 Python
python 画图 图例自由定义方式
2020/04/17 Python
python 实现关联规则算法Apriori的示例
2020/09/30 Python
一套软件开发工程师笔试题
2015/05/18 面试题
监理员的岗位职责
2013/11/13 职场文书
秋季婚礼证婚词
2014/01/11 职场文书
2015年项目工作总结
2015/04/29 职场文书
python 利用 PIL 将数组值转成图片的实现
2021/04/12 Python
Nginx 匹配方式
2022/05/15 Servers
关于MySQL中explain工具的使用
2023/05/08 MySQL