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 浏览器检测代码精简版
Mar 04 Javascript
jquery 字符串切割函数substring的用法说明
Feb 11 Javascript
jQuery中[attribute^=value]选择器用法实例
Dec 31 Javascript
Javascript基础教程之if条件语句
Jan 18 Javascript
基于jquery实现简单的手风琴特效
Nov 24 Javascript
bootstrapValidator.min.js表单验证插件
Feb 09 Javascript
javascript数据结构之串的概念与用法分析
Apr 12 Javascript
JS 组件系列之Bootstrap Table的冻结列功能彻底解决高度问题
Jun 30 Javascript
Vue 处理表单input单行文本框的实例代码
May 09 Javascript
微信小程序页面上下滚动效果
Nov 18 Javascript
Vue 实现v-for循环的时候更改 class的样式名称
Jul 17 Javascript
javascript实现图片轮换动作方法
Aug 07 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
ftp类(example.php)
2006/10/09 PHP
PHP4中session登录页面的应用
2008/07/25 PHP
PHP 只允许指定IP访问(允许*号通配符过滤IP)
2014/07/08 PHP
laravel安装zend opcache加速器教程
2015/03/02 PHP
PHP+MySQL存储数据常见中文乱码问题小结
2016/06/13 PHP
PHP使用Redis长连接的方法详解
2018/02/12 PHP
php实现数组中出现次数超过一半的数字的统计方法
2018/10/14 PHP
PHP+jQuery实现即点即改功能示例
2019/02/21 PHP
Web层改进II-用xmlhttp 无声息提交复杂表单
2007/01/22 Javascript
js比较和逻辑运算符的介绍
2013/03/10 Javascript
Nodejs实现的一个简单udp广播服务器、客户端
2014/09/25 NodeJs
js获得当前系统日期时间的方法
2015/05/06 Javascript
Bootstrap轮播加上css3动画,炫酷到底!
2015/12/22 Javascript
js实现简单的省市县三级联动效果实例
2016/02/18 Javascript
纯js实现手风琴效果代码
2020/04/17 Javascript
BootStrap select2 动态改变值的方法
2017/02/10 Javascript
原生JS仿QQ阅读点击展开、收起效果
2017/03/08 Javascript
vue forEach循环数组拿到自己想要的数据方法
2018/09/21 Javascript
基于layui table返回的值的多级嵌套的解决方法
2019/09/19 Javascript
vue 使用插槽分发内容操作示例【单个插槽、具名插槽、作用域插槽】
2020/03/06 Javascript
nodeJs项目在阿里云的简单部署
2020/11/27 NodeJs
[02:40]DOTA2殁境神蚀者 英雄基础教程
2013/11/26 DOTA
Python3基础之基本数据类型概述
2014/08/13 Python
用TensorFlow实现lasso回归和岭回归算法的示例
2018/05/02 Python
python生成多个只含0,1元素的随机数组或列表的实例
2018/11/12 Python
python爬虫 Pyppeteer使用方法解析
2019/09/28 Python
详解python中eval函数的作用
2019/10/22 Python
numpy数组做图片拼接的实现(concatenate、vstack、hstack)
2019/11/08 Python
微信浏览器左上角返回按钮拦截功能
2017/11/21 HTML / CSS
H5混合开发app如何升级的方法
2018/01/10 HTML / CSS
Watchshop德国:欧洲在线手表No.1
2019/06/20 全球购物
初中同学会活动方案
2014/08/22 职场文书
观看焦裕禄观后感
2015/06/09 职场文书
Mysql8.0递归查询的简单用法示例
2021/08/04 MySQL
vue实现书本翻页动画效果实例详解
2022/04/08 Vue.js
PostgreSQL数据库创建并使用视图以及子查询
2022/04/11 PostgreSQL