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 相关文章推荐
防止网站内容被拷贝的一些方法与优缺点好处与坏处分析
Nov 30 Javascript
JQuery操作单选按钮以及复选按钮示例
Sep 23 Javascript
JS实现动态生成表格并提交表格数据向后端
Nov 25 Javascript
jQuery 更改checkbox的状态,无效的解决方法
Jul 22 Javascript
JS仿QQ好友列表展开、收缩功能(第一篇)
Jul 07 Javascript
详解Vue.js组件可复用性的混合(mixin)方式和自定义指令
Sep 06 Javascript
使用typescript开发angular模块并发布npm包
Apr 19 Javascript
vue-cli3 项目从搭建优化到docker部署的方法
Jan 28 Javascript
ES6中的class是如何实现的(附Babel编译的ES5代码详解)
May 17 Javascript
vue在响应头response中获取自定义headers操作
Jul 24 Javascript
微信小程序实现简单购物车功能
Dec 30 Javascript
vue实现拖拽进度条
Mar 01 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
桌面中心(三)修改数据库
2006/10/09 PHP
用php实现让页面只能被百度gogole蜘蛛访问的方法
2009/12/29 PHP
php中yar框架实例用法讲解
2020/12/27 PHP
基于JavaScript实现继承机制之调用call()与apply()的方法详解
2013/05/07 Javascript
JavaScript中的关键字"VAR"使用详解 分享
2013/07/31 Javascript
JS动态调用方法名示例介绍
2013/12/18 Javascript
JQuery Tips相关(1)----关于$.Ready()
2014/08/14 Javascript
ajax如何实现页面局部跳转与结果返回
2015/08/24 Javascript
jQuery mobile 移动web(6)
2015/12/20 Javascript
jQuery实现的文字逐行向上间歇滚动效果示例
2017/09/06 jQuery
微信小程序使用audio组件播放音乐功能示例【附源码下载】
2017/12/08 Javascript
vue树形结构获取键值的方法示例
2018/06/21 Javascript
webpack4.x打包过程详解
2018/07/18 Javascript
js实现动态增加文件域表单功能
2018/10/22 Javascript
django使用channels2.x实现实时通讯
2018/11/28 Javascript
vue+高德地图写地图选址组件的方法
2019/05/18 Javascript
uni-app从安装到卸载的入门教程
2020/05/15 Javascript
为react组件库添加typescript类型提示的方法
2020/06/15 Javascript
深入解析Python中的urllib2模块
2015/11/13 Python
解决Python pandas plot输出图形中显示中文乱码问题
2018/12/12 Python
详解python读取和输出到txt
2019/03/29 Python
教你如何编写、保存与运行Python程序的方法
2019/07/12 Python
python的pygal模块绘制反正切函数图像方法
2019/07/16 Python
python pycharm的安装及其使用
2019/10/11 Python
浅谈tensorflow中Dataset图片的批量读取及维度的操作详解
2020/01/20 Python
从0到1使用python开发一个半自动答题小程序的实现
2020/05/12 Python
html5中去掉input type date默认样式的方法
2018/09/06 HTML / CSS
canvas 橡皮筋式线条绘图应用方法
2019/02/13 HTML / CSS
新西兰最大的连锁超市:Countdown
2020/06/04 全球购物
将"引用"作为函数返回值类型的格式、好处和需要遵守的规则
2016/02/09 面试题
什么是重载?CTS、CLS和CLR分别做何解释
2012/05/06 面试题
捷科时代的软件测试笔试题
2015/11/09 面试题
内业资料员岗位职责
2014/01/04 职场文书
迎新生标语大全
2014/10/06 职场文书
新店开业策划方案怎么书写?
2019/07/05 职场文书
javascript代码简写的几种常用方式汇总
2021/08/23 Javascript