数组
数组(array)是按次序排列的一组值。每个值的位置都有编号(从0开始),整个数组用方括号表示。
1 | let arr = ['a', 'b', 'c']; |
数组也是对象
1 | //数组实际上也是对象 |
.length
数组的length属性,返回数组的成员数量。
1 | let arr = ['a', 'b', 'c']; |
for…in
循环和数组的遍历
1 | let arr = ['a', 'b', 'c']; |
数组的空位
1 | //前面的空位的例子 |
1 | //空位虽然返回undefined但与赋值undefined还是不一样的 |
扩展运算符
扩展运算符(spread)是三个点(...),将一个数组转为用逗号分隔的参数序列。
1 | let arr = ['a', 'b', 'c'] |
1 | function fn(v, w, x, y, z) { } |
用途
1 | //数组潜复制 |
1 | //数组合并 |
1 | //结合解构赋值 |
1 | //将字符串转为数组 |
1 | //实现了 Iterator 接口的对象 |
1 | //扩展运算符内部调用的是数据结构的 `Iterator` 接口,因此只要具有 Iterator 接口的对象,都可以使用扩展运算符,比如 Map 结构。 |
Array.isArray()
判断变量值是否为数组
1 | Array.isArray(undefined) //false |
Array.from()
方法用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象(包括ES6新增的数据结构Set和Map)
1 | let arrayLike = { |
1 | let nodeList = document.querySelectorAll('div'); |
Array.from 还提供第二个参数,作用类似于数组的map方法,用来对每个元素进行处理,将处理后的值放入返回的数组。
1 | Array.from([1, , 2, , 3], (n) => n || 0) |
只要有一个原始的数据结构,你就可以先对它的值进行处理,然后转成规范的数组结构,进而就可以使用数量众多的数组方法。
1 | Array.from({ length: 2 }, () => 'xx') // ["xx", "xx"] |
Array.of
方法用于将一组值,转换为数组
1 | Array.of(1, false, undefined) //[1, false, undefined] |
find和findIndex
数组实例的find方法,用于找出第一个符合条件的数组成员。它的参数是一个回调函数,所有数组成员依次执行该回调函数,直到找出第一个返回值为true的成员,然后返回该成员。如果没有符合条件的成员,则返回undefined。
1 | [1, , 2, , 3].find(function(item){return item === 2;})//2, 返回第一个值等于2的元素 |
数组实例的findIndex方法的用法与find方法非常类似,返回第一个符合条件的数组成员的位置,如果所有成员都不符合条件,则返回-1。
fill(item, startIndex, endIndex)
填充一个数组
1 | ['a', 'b', 'c'].fill(7, 1, 2) //['a', 7, 'c'] |
entries,keys
它们都返回一个遍历器对象, 可以用for…of循环进行遍历
1 | ['a', 'b'].keys() |
includes
Array.prototype.includes方法返回一个布尔值,表示某个数组是否包含给定的值,与字符串的includes方法类似
1 | ['a', 'b'].includes('a') //true |
push, pop, shift, unshift
1 | [1, 2].push(3, 4) //[1, 2, 3, 4],在数组末位插入元素, 返回数组长度 |
join
join方法以参数作为分隔符,将所有数组成员组成一个字符串返回。如果不提供参数,默认用逗号分隔。
concat
方法用于多个数组的合并。它将新数组的成员,添加到原数组的尾部,然后返回一个新数组,原数组不变。
reverse
方法用于颠倒数组中元素的顺序,返回改变后的数组。注意,该方法将改变原数组。
slice(startIndex, upToIndex)
方法用于提取原数组的一部分,返回一个新数组,原数组不变
它的第一个参数为起始位置,第二个参数为终止位置(但该位置的元素本身不包括在内)。如果省略第二个参数,则一直返回到原数组的最后一个成员。
1 | var a = ['a', 'b', 'c']; |
1 | //方法的参数是负数,则表示倒数计算的位置。 |
splice(index, countToRemove, addElement1, addElement2, …)
方法用于删除原数组的一部分成员,并可以在被删除的位置添加入新的数组成员,返回值是被删除的元素。注意,该方法会改变原数组。第一个参数是删除的起始位置,第二个参数是被删除的元素个数。如果后面还有更多的参数,则表示这些就是要被插入数组的新元素。
sort
对数组成员进行排序。默认按照字典排序,也可以传入函数按照自定义方法排序。函数有两个参数,如果返回值大于0,表示第一个元素排在第二个元素后面;其他情况下,都是第一个元素排在第二个元素前面。
1 | [ |
map
对数组的所有成员依次调用一个函数,根据函数结果返回一个新数组。
1 | var numbers = [1, 2, 3]; |
forEach
也是遍历数组的所有成员,执行某种操作
1 | [2, 5, 9].forEach(function(item, index, array){ |
filter
filter参数是一个函数,所有数组成员依次执行该函数,返回结果为true的成员组成一个新数组返回。该方法不会改变原数组。
1 | [1, 2, 3, 4, 5].filter(function (item) { |
some,every
some方法是只要有一个数组成员的返回值是true就返回true
every方法则是所有数组成员的返回值都是true才返回true
reduce,reduceRight
方法依次处理数组的每个成员,最终累计为一个值。
1 | 1.累积变量,默认为数组的第一个成员 |
indexOf,lastIndexOf
方法返回给定元素在数组中第一次出现的位置,如果没有出现则返回-1; 第二个参数表示开始位置
1 | ['a', 'b', 'c'].indexOf('a', 1) // -1 |
lastIndexOf方法返回给定元素在数组中最后一次出现的位置,如果没有出现则返回-1。