在JavaScript中,数组无处不在。在最新版ECMAScript6的背景下,借助新的扩展符号、解构等特性,我们可以用数组做很多事情。在这篇文章中,我将分享几个超级有用的技巧。遍历空数组JavaScript数组实际上是“稀疏”的。稀疏数组其实是一个很重要的概念:稀疏数组就是其中的元素没有从0开始的连续索引。从定义上看,稀疏数组没有从0开始的连续索引。那么什么样的稀疏数组?原因不外乎:有没有被赋值的item;有一项已被删除(删除)。让我们看下面的例子:constarr=newArray(4);创建一个长度为4的新数组。你会发现遍历这个数组我们只得到:arr.map((elem,index)=>index);//[undefined,undefined,undefined,undefined]为了解决这个问题,比如我想得到a的值为其索引的数组,长度为4,可以这样做:constarr=Array.apply(null,newArray(4));arr.map((elem,index)=>index);//[0,1,2,3]当然我们还有更好的办法,就是利用ES6的扩展符:constarr=[...newArray(4)];arr.map((elem,index)=>index);//[0,1,2,3]给方法传递一个空参数如果你想调用一个方法,但是忽略这个方法的一个参数,那么下一般情况下会报错:functionmethod(a1,a2,a3){console.log('ok');}method('parameter1',,'parameter3');//UncaughtSyntaxError:Unexpectedtoken,在实际开发中,这样的场景并不少见。通常的做法是将此函数参数作为null或undefined传递:method('parameter1',null,'parameter3')//ormethod('parameter1',undefined,'parameter3');我个人不太喜欢用null代替,因为在JavaScript中,null会被当作一个对象,这其实很奇怪。但是在ES6中,有了扩展运算符和数组的特性,我们可以更好的实现上面的做法。如上所述,JavaScript中的数组本质上是稀疏的,因此将空值传递给数组是没有问题的。因此,我们这样做:method(...['parameter1',,'parameter3']);//ok数组去重数组去重是一个常见的话题。有很多方法可以实现它。但是我一直很奇怪为什么Array构造函数的原型上没有“官方”的方法来生成一个不重复的数组或者完成数组去重的功能。ES6扩展符的出现,成为了“官方”的解决方案。我们使用扩展器,结合Set构造函数,生成一个没有重复的数组:constarr=[...newSet([1,2,3,3])]//[1,2,3]事实上,NaN!=NaN对不同的数组去重方法会有不同的影响。在上面的方法中,我们会得到:constarr=[...newSet([1,2,3,3,NaN,NaN])]//[1,2,3,NaN]上实现的hack方法数组使用了ES6的新特性,简单、高效、优雅。在ES6引领前端发展的今天,希望对大家有所启发。也欢迎大家留言和我讨论。快乐编码!PS:作者的Github仓库,欢迎通过代码以各种形式交流。
