0
点赞
收藏
分享

微信扫一扫

javaScript复习——最全的Javascript数组总结

mm_tang 2022-03-11 阅读 89

创建对象的方式有两种:

1.使用new操作符和Object构造函数

2.使用对象字面量

JS中的数组是和其他语言一样一组有序的数,但不同的是JS数组中每个槽位可以存储任意类型的数据。
也就意味着数组的第一个元素是字符串、第二个可以是数值,第三个可以是对象。

还有ES中的数组是动态大小的,会随着数据的添加而自动增长。

创建数组

1.使用Array构造函数

    1.1 let colors = new Array()

    1.2 也可以创建数组的时候传入一个数值
        let colors = new Array(5)
        这时候就会创建一个初始长度为5的数组。
    1.3 也可以直接传入要保存的元素
        let colors = new Array(“red", "pink", "green")
        此时就会创建一个包含3个字符串值的数组。

注意:在使用Array构造函数时,可以省略new关键字,结果一样

2.使用数组字面量

let color = ["red", "green", "pink"]
let color = []
let values = [1,2,3]    

注意:在使用字面量创建数组时,不会调用Array构造函数。

3.ES6新增的用来创建数组的静态方法

1)from():用来将类数组结构转换为数组实例

Array.from(参数1, [参数2], [参数3])
参数一:可以是任何可迭代的结构,或者是一个有length属性和可索引元素的结构。
例如:
Array.from(“hello”) //会被拆成单个字符数组[“h”, “e”, “l”, “l”, “o”]

也可以将集合、Map类型映射为数组

可以对现有的数组执行浅复制
const a1 = [1, 2, 3,4]
const a2 = Array.from(a1)

参数2:可选的映射函数参数,用来直接增强数组的值,而无需创建中间数组。
如:
const a1 = [1, 2, 3,4]
Array.from(a1, x => x**2) //返回 [1, 4, 9, 16]

参数3:用于指定映射函数中的this值。(箭头函数中不适用)

2)of():用于将一组参数转换为数组实例
Array.of(1,2,3,4)   //[1, 2,3 ,4]

数组空位

例如:
const options = [,] //此为数组空位

ES6新增的方法会将这些空位当成存在的元素值,只不过值为undefined

数组索引

arr[index]:用来访问数组中的元素。

数组中的length属性:
不是只读的,可以通过修改length值,可以从数组末尾来删除或添加元素。如果将数组length变大,而没有设置值,则默认将以undefined来填充。

注意:数组最多可以包含月42亿个元素。而且如果 以最大值作为初始值创建数组,会将脚本的执行时间变长。

检测数组

判断一个对象是不是数组。分两种情况

  1. 在一个只用一个网页(一个全局作用域的)的情况下,使用instanceof操作符足够。
    if(value instanceof Array){

}
使用instanceof会有一个问题:
如果网页中有多个框架,则可能会出现两个不同的全局上下文,因此会有两个不同版本的Array构造函数。如果把数组要从一个框架传给另一个框架,这个数组的构造函数就会有别于第二个框架内本地创建的数组。
所以就出先以下第二种方法。

  1. 使用Array.isArray():用来确定一个一个值是否为数组,而不管它在哪个全局执行上下文中创建。
    if(Array.isArray(value)){

    }

迭代器方法

ES6中,Array的原型上暴露了3个用于检索数组内容的方法:

  1. keys():返回数组索引的迭代器
  2. values():返回数组元素的迭代器
  3. entries():返回数组索引/值对的迭代器
    这三个方法都返回迭代器,可以使用Array.from()方法直接将其转换为数组。

使用ES6的结构,可以非常容易的在循环中拆分键/值对。

const color = [“red”, “green”, “pink”]
for(let [index, element] of a.entries()){
console.log(index)
console.log(element)
}

复制和填充方法(ES6新增)

1.批量复制方法copyWithin()

2.填充数组方法fill()

转换方法

  1. toString()方法:将数组转换为字符串,数组元素中间使用逗号分隔。
  2. valueOf():将数组转换为字符串。
  3. toLocalString():将数组转换为字符串,但会调用每个数组元素的toLocalString()方法
  4. join():接收一个参数,即字符串分隔符,返回包含所有项的字符串。如果不给join穿任何参数或者传入undefined,则依然使用逗号作为分隔符。

注意:如果数组中某一项是null或undefined,则在join(), toLocalString(), toString()和valueOf()返回的结果中会以空串表示。

栈方法

  1. push():接收任意长度的参数,将他们添加到数组的末尾,返回数组的新长度。

  2. pop():删除数组的最后一项,同时减少数组的length值,返回被删除的项。

队列方法

先进先出。从队尾添加,从队首删除。

  1. shift():删除数组的第一项并返回它,然后数组长度减1。
  2. push():从末尾添加。
    这两方法可以将数组当成队列使用。
  3. ES也为数组提供了unshift()方法:可以在数组开头添加元素,然后返回数组的新长度。通过使用unshift()和pop()可以模拟反方向上的队列。

排序方法

  1. reserve():将给数组反向排列
  2. sort():默认情况下会按照升序排列数组元素。sort()会在每一项上调用String转型函数,然后笔记哦啊字符串来决定顺序。即使数组的元素都是数值,也会将其转换为字符串再比较。
    如下例子:
    let values = [0, 1, 5, 10, 15]
    values.sort();
    console.log(values) // 0, 1, 10, 15, 5
    调用sort会按照这些数值的字符串形式重新排序,字符串“10”在“5”前面,所以会有以上结果出现。
    所以sort()函数会接收一个比较函数,用来判断哪个值应该排在前面。如果第一个参数应该排在第二参数前,就返回负值;若相等,就返回0;若第一个参数在第二个参数后面,就返回正值。
    注意 reverse()和sort()都返回调用他们数组的引用。

操作方法

  1. concat():可以在现有数组全部元素基础上创建一个新数组:首先会创建一个当前数组的副本,然后再把他的参数添加到数组末尾。最后返回这个新构建的数组。
    例子:
    let color = [“red”, “green”, “blue”]
    let color2 = color.cat(“yellow”, [“pink”, “white”])
    console.log(color2) //[“red”, “green”, “blue”, “yellow”, “pink”, “white”] // 这里会将[“pink”, “white”]打平
    打平行为可以重写,方法是:在参数数组上指定一个特殊的符号:Symbol.isConcat-Spreadable。可以组织concat()方法打平参数。true为强制打平,false为不打平。

  2. slice():用来创建包含原有数组中一个或多个元素的新数组。接收一个或两个参数:返回元素的开始索引和结束索引。为左闭右开区间[)。如果参数有负值,就以数组长度加上这个负值来确定。

  3. splice():很强大。用来在数组中间插入元素。(改变原数组)有下面三种使用方法:

  • 删除:需要给splice()传入两个参数:要删除的第一个元素的位置和要删除的元素数量
  • 插入:需要传入3个参数:开始位置、0(要删除的元素数量)和要插入的元素。
  • 替换:splice()在删除元素的同时,可以在指定位置插入新元素。传三个参数:开始位置、要删除的元素数量和要插入的任意多个元素。要删除的元素数量可以和插入的数量不一致。

搜索和位置方法

  1. indexOf():接收两个参数,要查找的元素和一个可选的起始位置。返回要查要的元素在数组中的位置,若没有则返回-1。从前往后搜索。
  2. lastIndexOf():接收两个参数,要查找的元素和一个可选的起始位置。返回要查要的元素在数组中的位置,若没有则返回-1。从后往前查找
  3. includes():接收两个参数,要查找的元素和一个可选的起始位置。返回一个布尔值,表示是否至少找到一个与指定元素匹配的项。在比较第一个参数跟数组,每一项时,会使用(===)严格相等。

断言函数方式的搜索方法

  1. find():返回第一个匹配的元素
    2.findIndexOf():返回第一个匹配元素的索引。
    这两个方法都是从数组最小的索引开始搜索。找到匹配项以后,这两方法都不再向前搜索。
    例如:
    people.find((element, index, array) => element.age < 28>) //会返回people数组中年龄小于28的一项。

迭代方法

ES为数组定义了5个迭代方法。每个方法接收两个参数:以每一项为参数运行的函数,以及可选的作为函数运行上下文的作用域对象(影响函数中的this值)。传给每个方法函数接收3个参数:数组元素、数组索引和数组本身。

  1. every():对数组中的每一项运行转入的函数,如果每一项函数都返回true,则这个防范返回true
  2. filter():对数组中的每一项运行转入的函数,函数返回true的项会组成数组之后返回。(非常适合用来从数组中筛选满足条件的元素)
  3. forEach():对数组中的每一项运行转入的函数,没有返回值。本质上相当于for循环遍历数组。
  4. map():对数组中的每一项运行转入的函数,返回由每次调用的结果构成的数组
  5. some():对数组中的每一项运行转入的函数,如果有一项函数返回为true,则这个方法返回true。
    注意:这些方法都不会改变调用他的数组。

归并方法

下面两个方法都会迭代数组的所有项,并在此基础上构建一个最终的返回值。reduce()从数组第一项遍历到最后一项。reduceRight()从最后一项遍历到第一项。

  1. reduce()
  2. reduceRight()
    都接受两个参数:每一项都会运行的归并函数,以及可选的额以之为归并起点的初始值。传给这两个函数的归并函数接收4个参数:上一个归并值、当前项、当前项的索引和数组本身。这个函数返回的任何值都会作为下一次调用同一个函数的参数。
举报

相关推荐

0 条评论