在JavaScript中,数组随处可见。在最新版本的ECMAScript 6背景下,借助新的睁开符、解构等特征,我们能够对数组做许多“四两拨千斤”的事变。
这片文章我会分享几个超等有用的hack技能。
遍历空数组
JavaScript数组现实上是生成“希罕”的。希罕数组现实上是一个很主要的观点:
A sparse array is one in which the elements do not have contiguous indexes starting at 0.
从定义来看,希罕数组就是没有从0最先的一连的index。
那末什么样会有希罕数组?缘由无外乎:
有无被赋值的项;
有被删除(delete)的项
我们从下面这个例子来看:
const arr = new Array(4);
新建了一个长度为4的数组。你会发明,遍历这个数组我们只会获得:
arr.map((elem, index) => index);
// [undefined, undefined, undefined, undefined]
为了处置惩罚这个题目,比方,我想获得一个每一项值为其index的数组,长度为4,能够如许做:
const arr = Array.apply(null, new Array(4));
arr.map((elem, index) => index);
// [0, 1, 2, 3]
固然,我们有一个更好的要领,就是运用ES6的睁开符特征:
const arr = [...new Array(4)];
arr.map((elem, index) => index);
// [0, 1, 2, 3]
给要领通报一个空参数
假如你想挪用某个要领,然则疏忽这个要领的某个参数,那末一般情况下,如许做是会报错的:
function method (a1, a2, a3) { console.log('ok'); }
method('parameter1', , 'parameter3');
// Uncaught SyntaxError: Unexpected token ,
在现实开辟中,如许的场景实在习以为常。一般的做法是,将这个函数参数通报为null或许undefined:
method('parameter1', null, 'parameter3')
// or
method('parameter1', undefined, 'parameter3');
我个人实在并不喜好用null来替代,由于在JavaScript中,null会被看成一个object来处置惩罚,这现实上是很新鲜的。然则在ES6中,借助睁开符和数组特征,我们能更好地完成上述做法。
上文提到JavaScript中数组现实上是生成希罕的,所以,给一个数组通报一个空值是没有题目的。因而,我们如许做:
method(...['parameter1', , 'parameter3']);
// ok
数组去重
数组去重,是一个陈词滥调的话题。完成体式格局真的已许多了。然则我实在一直以来不明白Array组织函数的原型上,为何没有一个“官方”的要领,来发生一个不反复的数组或许完成数组去重的功用。ES6睁开符的涌现,成为了一种“官方”处置惩罚方案。
我们运用睁开符,连系Set组织函数,便能够发生一个不含反复项的数组:
const arr = [...new Set([1, 2, 3, 3])]
// [1, 2, 3]
实在, NaN != NaN 对数组去重的差别要领会发生差别影响。
在上述要领当中,我们会获得:
const arr = [...new Set([1, 2, 3, 3, NaN, NaN])]
// [1, 2, 3, NaN]
总结
本日引见了几个应用ES6新特征对数组完成的一些hack要领,简朴有用且文雅得体。在ES6引领前端开辟的本日,愿望对大家能有所启示。也迎接留言,与我议论。
Happy Coding!
PS: 作者Github堆栈,迎接经由过程代码各种形式交换。