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 相关文章推荐
js word表格动态添加代码
Jun 07 Javascript
js操作二级联动实现代码
Jul 27 Javascript
jQuery获取table行数并输出单元格内容的实现方法
Jun 30 Javascript
巧用Javascript的逻辑运算符
Dec 02 Javascript
React组件的三种写法总结
Jan 12 Javascript
使用 Node.js 模拟滑动拼图验证码操作的示例代码
Nov 02 Javascript
SVG实现时钟效果
Jul 17 Javascript
vue实现多个元素或多个组件之间动画效果
Sep 25 Javascript
node+multer实现图片上传的示例代码
Feb 18 Javascript
基于leaflet.js实现修改地图主题样式的流程分析
May 15 Javascript
vue3中轻松实现switch功能组件的全过程
Jan 07 Vue.js
JavaScript实现消消乐的源代码
Jan 12 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 进度条实现代码
2009/03/10 PHP
PHP限制页面只能在微信自带浏览器访问的代码
2014/01/15 PHP
PHP 动态生成静态HTML页面示例代码
2014/01/15 PHP
php实现按指定大小等比缩放生成上传图片缩略图的方法
2014/12/15 PHP
jquery+php实现导出datatables插件数据到excel的方法
2015/07/06 PHP
PHP实现bitmap位图排序与求交集的方法
2016/07/28 PHP
浅谈PHP的反射机制
2016/12/15 PHP
掌握PHP垃圾回收机制详解
2019/03/13 PHP
Laravel统计一段时间间隔的数据方法
2019/10/09 PHP
javascript 手动给表增加数据的小例子
2013/07/10 Javascript
JavaScript简单生成 N~M 之间随机数的方法
2017/01/13 Javascript
jQuery模拟窗口抖动效果
2017/03/15 Javascript
Vue+webpack+Element 兼容问题总结(小结)
2018/08/16 Javascript
代码分析vue中如何配置less
2018/09/28 Javascript
JS实现倒计时图文效果
2018/11/17 Javascript
详解Puppeteer前端自动化测试实践
2019/02/21 Javascript
微信小程序新手教程之页面打开数量限制
2019/03/03 Javascript
Bootstrap table 实现树形表格联动选中联动取消功能
2019/09/30 Javascript
如何利用nodejs自动定时发送邮件提醒(超实用)
2020/12/01 NodeJs
[49:59]KG vs Mineski 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
[52:32]完美世界DOTA2联赛PWL S2 Magma vs LBZS 第三场 11.18
2020/11/18 DOTA
Python计算一个文件里字数的方法
2015/06/15 Python
Python中的Descriptor描述符学习教程
2016/06/02 Python
详解python做UI界面的方法
2019/02/27 Python
Python Web框架之Django框架Form组件用法详解
2019/08/16 Python
python 通过邮件控制实现远程控制电脑操作
2020/03/16 Python
Python 里最强的地图绘制神器
2021/03/01 Python
英国最大的宠物食品和宠物用品网上零售商: Zooplus
2016/08/01 全球购物
美国高级音响品牌:Master&Dynamic
2018/07/05 全球购物
L*SPACE官网:比基尼、泳装和度假服装
2019/03/18 全球购物
英国DIY汽车维修配件网站:DIY Car Service Parts
2019/08/30 全球购物
美国艺术和工艺品商店:Hobby Lobby
2020/12/09 全球购物
小学教师岗位职责
2013/11/25 职场文书
职工运动会感言
2014/02/07 职场文书
教师个人自我剖析材料
2014/09/29 职场文书
MySQL 存储过程的优缺点分析
2021/05/20 MySQL