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 css在IE和Firefox中区别分析
Feb 18 Javascript
基于jQuery的输入框无值自动显示指定数据的实现代码
Jan 24 Javascript
javascript静态页面传值的三种方法分享
Nov 12 Javascript
javascript面向对象之对象的深入理解
Jan 13 Javascript
18个非常棒的jQuery代码片段
Nov 02 Javascript
JavaScript动态添加css样式和script标签
Jul 19 Javascript
js判断数组key是否存在(不用循环)的简单实例
Aug 03 Javascript
微信小程序 出现47001 data format error原因解决办法
Mar 10 Javascript
Vue.js路由vue-router使用方法详解
Mar 20 Javascript
jQuery中库的引用方法
Jan 06 jQuery
基于jquery的on和click的区别详解
Jan 15 jQuery
js中值引用和地址引用实例分析
Jun 21 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
PHP5.4中json_encode中文转码的变化小结
2013/01/30 PHP
php版微信开发Token验证失败或请求URL超时问题的解决方法
2016/09/23 PHP
php框架CodeIgniter使用redis的方法分析
2018/04/13 PHP
JSON扫盲帖 JSON.as类教程
2009/02/16 Javascript
TextArea 控件的最大长度问题(js json)
2009/12/16 Javascript
JS中prototype关键字的功能介绍及使用示例
2013/07/21 Javascript
javascript转换日期字符串为Date日期对象的方法
2015/02/13 Javascript
浅谈JavaScript数据类型
2015/03/03 Javascript
js实现简单秒表走动的时钟特效
2020/03/25 Javascript
基于jquery实现下拉框美化特效
2016/02/02 Javascript
JavaScript操作class和style样式代码详解
2016/02/13 Javascript
Jquery实时监听input value的实例
2017/01/26 Javascript
Angular实现响应式表单
2017/08/04 Javascript
聊聊Vue.js的template编译的问题
2017/10/09 Javascript
关于HTTP传输中gzip压缩的秘密探索分析
2018/01/12 Javascript
微信小程序地图实现展示线路
2020/07/29 Javascript
JQuery+drag.js上传图片并且实现图片拖曳
2020/11/18 jQuery
根据DataFrame某一列的值来选择具体的某一行方法
2018/07/03 Python
详解Python给照片换底色(蓝底换红底)
2019/03/22 Python
Python3批量生成带logo的二维码方法
2019/06/24 Python
python脚本开机自启的实现方法
2019/06/28 Python
深入了解Django View(视图系统)
2019/07/23 Python
解决Djang2.0.1中的reverse导入失败的问题
2019/08/16 Python
详解python中的生成器、迭代器、闭包、装饰器
2019/08/22 Python
Python实现清理微信僵尸粉功能示例【基于itchat模块】
2020/05/29 Python
4款Python 类型检查工具,你选择哪个呢?
2020/10/30 Python
django使用多个数据库的方法实例
2021/03/04 Python
让IE6、IE7、IE8支持CSS3的脚本
2010/07/20 HTML / CSS
css3使网页、图片变成灰色兼容大多数浏览器
2014/07/02 HTML / CSS
Puccini乌克兰:购买行李箱、女士手袋网上商店
2020/08/06 全球购物
MySQL面试题目集锦
2016/04/14 面试题
英语课外活动总结
2014/08/27 职场文书
爱心募捐感谢信
2015/01/22 职场文书
2015年科普工作总结
2015/07/23 职场文书
Vue3.0写自定义指令的简单步骤记录
2021/06/27 Vue.js
JavaScript实现一键复制内容剪贴板
2022/07/23 Javascript