Skip to content

3个有用的数组技巧 #2

Description

@HecateDK

数组在JavaScript中无处不在,ECMAScript6中引入了数组的扩展:数组的扩展

此处我们来聊聊3个有用的数组技巧:

稀疏数组和密集数组

什么事稀疏数组?让我们来创建一个简单的稀疏数组:

const arr = new Array(4);
> a        //  [  ]
> a[0]    //  undefined

当你遍历它时,你会发现,它并没有元素.JavaScript(ES5)中的forEach(),filter(), every()some()都会跳过空位会跳过这些缝隙;map()会跳过空位,但会保留这个值。而ES6则明确规定把空位转为undefined

const arr = new Array(4);
arr.map((elem, index) => index);
> a     //  [undefined, undefined, undefined, undefined]

我们可以使用Array.apply来解决这个问题:

const arr = new Array(4);
arr.map((elem, index) => index);
> a     //  [undefined, undefined, undefined, undefined]

上述创建的数组就是一个密集数组。

将一个空参数传递给一个方法

如果你像调用一个方法,并且把其中一个参数设置为空,JavaScript是会报错的:

> method('parameter1', , 'parameter3');    // Uncaught SyntaxError: Unexpected token ,

我们通常的处理方法是传递一个nullundefined进去:

method('parameter1', null, 'parameter3')
// 或者
method('parameter1', undefined, 'parameter3');

因为JavaScript把null视为一个对象,这是奇怪的。随着ES6中扩展运算符的引入,我们可以利用上诉稀疏数组的本质,将一个空参数传递给一个方法,如下:

method(...['parameter1', , 'parameter3']); // works!

唯一数组值

ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。

const arr = [...new Set([1, 2, 3, 3])];
> arr  // [1, 2, 3]

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions