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中通过闭包解决只能取得包含函数中任何变量最后一个值的问题
Aug 12 Javascript
创建公共调用 jQuery Ajax 带返回值
Aug 01 Javascript
IE下Ajax缓存问题的快速解决方法(get方式)
Jan 09 Javascript
学习jQuey中的return false
Dec 18 Javascript
分享JS数组求和与求最大值的方法
Aug 11 Javascript
js学习笔记之事件处理模型
Oct 31 Javascript
面试常见的js算法题
Mar 23 Javascript
js中apply和Math.max()函数的问题及区别介绍
Mar 27 Javascript
深入理解JavaScript的async/await
Aug 05 Javascript
JavaScript日期工具类DateUtils定义与用法示例
Sep 03 Javascript
详解vuex状态管理模式
Nov 01 Javascript
详解Vue iview IE浏览器不兼容报错(Iview Bable polyfill)
Jan 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
《一拳超人》埼玉一拳下去,他们存在了800年毫无意义!
2020/03/02 日漫
php 连接mssql数据库 初学php笔记
2010/03/01 PHP
php中in_array函数用法分析
2014/11/15 PHP
让div层随鼠标移动的实现代码 ie ff
2009/12/18 Javascript
js使用心得分享
2015/01/13 Javascript
JS网页在线获取鼠标坐标值的方法
2015/02/28 Javascript
javascript跨域原因以及解决方案分享
2015/04/08 Javascript
简介JavaScript中Boolean.toSource()方法的使用
2015/06/05 Javascript
VUEJS实战之构建基础并渲染出列表(1)
2016/06/13 Javascript
AngularJS 异步解决实现方法
2017/06/12 Javascript
vue按需加载组件webpack require.ensure的方法
2017/12/13 Javascript
D3.js实现简洁实用的动态仪表盘的示例
2018/04/04 Javascript
vue-router的钩子函数用法实例分析
2019/10/26 Javascript
JavaScript实现10秒后再次获取验证码
2020/12/02 Javascript
[05:13]2018DOTA2亚洲邀请赛主赛事第二日战况回顾 LGD、VG双雄携手晋级
2018/04/05 DOTA
Python守护进程(daemon)代码实例
2015/03/06 Python
python统计字母、空格、数字等字符个数的实例
2018/06/29 Python
python 常用的基础函数
2018/07/10 Python
Python 多维List创建的问题小结
2019/01/18 Python
python过滤中英文标点符号的实例代码
2019/07/15 Python
Python PIL图片添加字体的例子
2019/08/22 Python
Python编写打字训练小程序
2019/09/26 Python
在django中实现choices字段获取对应字段值
2020/07/12 Python
HTML5仿手机微信聊天界面
2016/03/18 HTML / CSS
英国乐购杂货:Tesco Groceries
2018/11/29 全球购物
美国健康和保健平台:healtop
2020/07/02 全球购物
十佳教师事迹材料
2014/01/11 职场文书
保安岗位职责
2014/02/21 职场文书
2015年秋季新学期寄语
2015/03/25 职场文书
2015中秋节晚会主持词
2015/07/01 职场文书
党员发展大会主持词
2015/07/03 职场文书
考教师资格证不要错过的4个最佳时机
2019/07/17 职场文书
创业计划书之家教托管
2019/09/25 职场文书
导游词之麻姑仙境
2019/11/18 职场文书
【HBU】数据库第四周 单表查询
2021/04/05 SQL Server
css height属性中的calc方法详解
2021/06/03 HTML / CSS