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 相关文章推荐
破除网页鼠标右键被禁用的绝招大全
Dec 27 Javascript
JS解密入门之凭直觉解
Jun 25 Javascript
JavaScript 字符串处理函数使用小结
Dec 02 Javascript
jQuery ajax dataType值为text json探索分享
Sep 23 Javascript
javascript自定义startWith()和endWith()的两种方法
Nov 11 Javascript
用javascript关闭本窗口技巧小结
Sep 05 Javascript
jquery实现对联广告的方法
Feb 05 Javascript
JavaScript实现的字符串replaceAll函数代码分享
Apr 02 Javascript
浅谈Vue.js
Mar 02 Javascript
详解angularjs中如何实现控制器和指令之间交互
May 31 Javascript
VUE axios上传图片到七牛的实例代码
Jul 28 Javascript
Vue router配置与使用分析讲解
Dec 24 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
php 调试利器debug_print_backtrace()
2012/07/23 PHP
Laravel搭建后台登录系统步骤详解
2016/07/26 PHP
PHP常用函数总结(180多个)
2016/12/25 PHP
php和redis实现秒杀活动的流程
2019/07/17 PHP
php装饰者模式简单应用案例分析
2019/10/23 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
2020/04/04 PHP
javascript 页面只自动刷新一次
2009/07/10 Javascript
NodeJs基本语法和类型
2015/02/13 NodeJs
jquery实现可关闭的倒计时广告特效代码
2015/09/02 Javascript
详解Js中的模块化是如何实现的
2017/10/18 Javascript
Node.js readline模块与util模块的使用
2018/03/01 Javascript
JavaScript设计模式之原型模式分析【ES5与ES6】
2018/07/26 Javascript
Angular ui-roter 和AngularJS 通过 ocLazyLoad 实现动态(懒)加载模块和依赖
2018/11/25 Javascript
js图数据结构处理 迪杰斯特拉算法代码实例
2019/09/11 Javascript
vue页面切换项目实现转场动画的方法
2019/11/12 Javascript
python输出指定月份日历的方法
2015/04/23 Python
Python xlrd读取excel日期类型的2种方法
2015/04/28 Python
详解Python中的Cookie模块使用
2015/07/06 Python
Python图片裁剪实例代码(如头像裁剪)
2017/06/21 Python
Python开发的十个小贴士和技巧及长常犯错误
2018/09/27 Python
详解如何为eclipse安装合适版本的python插件pydev
2018/11/04 Python
Django实现单用户登录的方法示例
2019/03/28 Python
Python实现平行坐标图的两种方法小结
2019/07/04 Python
用Python调用win命令行提高工作效率的实例
2019/08/14 Python
python的pip有什么用
2020/06/17 Python
Scrapy中如何向Spider传入参数的方法实现
2020/09/28 Python
法学毕业生自我鉴定
2013/11/08 职场文书
巧克力蛋糕店创业计划书
2014/01/14 职场文书
观看信仰心得体会
2014/09/04 职场文书
群众路线对照检查材料思想汇报怎么写
2014/09/18 职场文书
法人代表证明书
2014/09/18 职场文书
2014年妇产科工作总结
2014/12/08 职场文书
2015年家长学校工作总结
2015/04/22 职场文书
学雷锋团日活动总结
2015/05/06 职场文书
党员反邪教心得体会
2016/01/15 职场文书
PHP策略模式写法
2021/04/01 PHP