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 读取图片文件的大小
Jun 25 Javascript
jQuery之Deferred对象详解
Sep 04 Javascript
JavaScript实现俄罗斯方块游戏过程分析及源码分享
Mar 23 Javascript
jQuery中 attr() 方法使用小结
May 03 Javascript
纯JS代码实现一键分享功能
Apr 20 Javascript
JavaScript实现多重继承的方法分析
Jan 09 Javascript
vue-router项目实战总结篇
Feb 11 Javascript
vue+element-ui实现表格编辑的三种实现方式
Oct 31 Javascript
详解微信小程序文件下载--视频和图片
Apr 24 Javascript
详解JavaScript修改注册表的方法
Jan 05 Javascript
浅谈js数组splice删除某个元素爬坑
Oct 14 Javascript
React Hook用法示例详解(6个常见hook)
Apr 28 Javascript
详解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
大家在抢红包,程序员在研究红包算法
2015/08/31 PHP
thinkPHP5.0框架API优化后的友好性分析
2017/03/17 PHP
PHP ADODB实现事务处理功能示例
2018/05/25 PHP
PHP日志LOG类定义与用法示例
2018/09/06 PHP
Nginx+php配置文件及原理解析
2020/12/09 PHP
来自qq的javascript面试题
2010/07/24 Javascript
收集的一些Array及String原型对象的扩展实现代码
2010/12/05 Javascript
解决JS浮点数运算出现Bug的方法
2013/03/12 Javascript
Jquery实现点击切换图片并隐藏显示内容(2种方法实现)
2013/04/11 Javascript
toggle一个div显示或隐藏且可扩展成自定义下拉框
2013/09/12 Javascript
JS获取农历日期具体实例
2013/11/14 Javascript
如何调试异步加载页面里包含的js文件
2014/10/30 Javascript
JavaScript使用pop方法移除数组最后一个元素用法实例
2015/04/06 Javascript
详解JavaScript UTC时间转换方法
2016/01/07 Javascript
JS点击缩略图整屏居中放大图片效果
2017/07/04 Javascript
JS原生带小白点轮播图实例讲解
2017/07/22 Javascript
JSON在Javascript中的使用(eval和JSON.parse的区别)详细解析
2017/09/05 Javascript
vue mint-ui学习笔记之picker的使用
2017/10/11 Javascript
Bootstrap table 实现树形表格联动选中联动取消功能
2019/09/30 Javascript
浅谈Node新版本13.2.0正式支持ES Modules特性
2019/11/25 Javascript
vue cli3.0打包上线静态资源找不到路径的解决操作
2020/08/03 Javascript
toString.call()通用的判断数据类型方法示例
2020/08/28 Javascript
[51:26]VP vs VG 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
解决Pycharm中import时无法识别自己写的程序方法
2018/05/18 Python
使用PyQt5实现图片查看器的示例代码
2020/04/21 Python
Python 实现RSA加解密文本文件
2020/12/30 Python
英国最大的高品质珠宝和手表专家:Goldsmiths
2017/03/11 全球购物
雷朋巴西官方商店:Ray-Ban Brasil
2020/07/21 全球购物
应届毕业生的自我鉴定
2013/11/13 职场文书
市场营销求职信范文
2014/02/21 职场文书
校园学雷锋活动月总结
2014/03/09 职场文书
离婚协议书标准格式
2014/10/04 职场文书
2014年个人师德工作总结
2014/12/04 职场文书
初中中等生评语
2014/12/29 职场文书
Mysql8.0递归查询的简单用法示例
2021/08/04 MySQL
MySQL表类型 存储引擎 的选择
2021/11/11 MySQL