Array

数组创建

let arr1 = []
let arr2 = Array(3) // [empty × 3]
let arr3 = Array('3') // ["3"]
let arr4 = Array.of(3) // [3]
let arr5 = Array.of('3') // ['3']
let arr6 = Array.from({ length: 3 }) // [undefined, undefined, undefined]

稀疏数组

空位的检测 in

//空位是没有任何值,可以用 in 运算符检测
let a = [, , ,] // [empty × 3]
0 in a // false

造成稀疏数组的操作

  • delete 操作符

let b = [1, 2, 3]
delete b[0] // [empty, 2, 3]
  • 构造函数

let a = Array(3) // [empty × 3]
  • 在数组字面量中省略值

  • 指定数组索引大于数组长度

  • 指定数组长度大于当前数组长度

尽量避免创建和使用稀疏数组,因为在 ES6 之前的方法,对稀疏数组的处理存在很多不统一的地方

操作的不统一

  • ES5 对空位的处理很不一致了,大多数情况下会忽略空位

    • forEach(), filter(), reduce(), every() 和 some() 跳过空位

    • map() 会跳过空位,但会保留这个值

    • join() 和 toString() 会将空位视为 undefined,而 undefined 和 null 会被处理成空字符串

  • ES6 则是明确将空位转为 undefined

    • Array.from 方法会将数组的空位,转为 undefined

    • 扩展运算符(...)也会将空位转为 undefined

    • copyWithin() 会连空位一起拷贝

    • fill() 会将空位视为正常的数组位置

    • for...of 循环也会遍历空位

    • entries()、keys()、values()、find()和 findIndex() 会将空位处理成 undefined

undefined 数组的正确创建方式

数组去重

  1. 入门

  1. indexOf(IE8 及更早版本不支持)

  1. filter(IE9+)

  1. Object 的 key value

  1. sort

  1. ES6 Set

  1. ES6 Map

Last updated