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 相关文章推荐
JQuery 学习笔记 选择器之五
Jul 23 Javascript
javascript对select标签的控制(option选项/select)
Jan 31 Javascript
createTextRange()的使用示例含文本框选中部分文字内容
Feb 24 Javascript
JavaScript用Number方法实现string转int
May 13 Javascript
Javascript实现获取窗口的大小和位置代码分享
Dec 04 Javascript
jquery手风琴特效插件
Feb 04 Javascript
解决Jquery向页面append新元素之后事件的绑定问题
Mar 16 Javascript
JS实现网页右侧带动画效果的伸缩窗口代码
Oct 29 Javascript
jQuery实现checkbox的简单操作
Nov 18 jQuery
说说如何在Vue.js中实现数字输入组件的方法
Jan 08 Javascript
使用vuex解决刷新页面state数据消失的问题记录
May 08 Javascript
vue element upload实现图片本地预览
Aug 20 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
php实现rc4加密算法代码
2012/04/25 PHP
Php中文件下载功能实现超详细流程分析
2012/06/13 PHP
PHP同时连接多个mysql数据库示例代码
2014/03/17 PHP
php生成QRcode实例
2014/09/22 PHP
php中实现xml与mysql数据相互转换的方法
2014/12/25 PHP
PHP的cURL库简介及使用示例
2015/02/06 PHP
php gd等比例缩放压缩图片函数
2016/06/12 PHP
完美解决php 导出excle的.csv格式的数据时乱码问题
2017/02/18 PHP
ImageFlow可鼠标控制图片滚动
2008/01/30 Javascript
jQuery实现跟随鼠标运动图层效果的方法
2015/02/02 Javascript
举例讲解JavaScript substring()的使用方法
2015/11/09 Javascript
三个js循环的关键字示例(for与while)
2016/02/16 Javascript
详解vue.js2.0父组件点击触发子组件方法
2017/05/10 Javascript
用node和express连接mysql实现登录注册的实现代码
2017/07/05 Javascript
在vue中使用SockJS实现webSocket通信的过程
2018/08/29 Javascript
微信小程序搜索功能(附:小程序前端+PHP后端)
2019/02/28 Javascript
关于vue路由缓存清除在main.js中的设置
2019/11/06 Javascript
详解vue 中 scoped 样式作用域的规则
2020/09/14 Javascript
原生js拖拽功能制作滑动条实例代码
2021/02/05 Javascript
python进阶教程之循环相关函数range、enumerate、zip
2014/08/30 Python
Django中间件工作流程及写法实例代码
2018/02/06 Python
在Python中获取两数相除的商和余数方法
2018/11/10 Python
python 中xpath爬虫实例详解
2019/08/26 Python
Python3标准库之dbm UNIX键-值数据库问题
2020/03/24 Python
Python 实现自动完成A4标签排版打印功能
2020/04/09 Python
Python在后台自动解压各种压缩文件的实现方法
2020/11/10 Python
关于pycharm 切换 python3.9 报错 ‘HTMLParser‘ object has no attribute ‘unescape‘ 的问题
2020/11/24 Python
Python 利用argparse模块实现脚本命令行参数解析
2020/12/28 Python
Cynthia Rowley官网:全球领先的生活方式品牌
2020/10/27 全球购物
绘画设计学生的个人自我评价
2013/09/20 职场文书
初中三好学生自我鉴定
2014/04/07 职场文书
《二泉映月》教学反思
2014/04/15 职场文书
汤姆叔叔的小屋读书笔记
2015/06/30 职场文书
中学图书馆工作总结
2015/08/11 职场文书
python开发飞机大战游戏
2021/07/15 Python
vue @ ~ 相对路径 路径别名设置方式
2022/06/05 Vue.js