前端数组api 整理

93 阅读10分钟

数组常用api总结

(1)数组序列化(toString(),join())

(2)构造函数的方法(isArray,from,of)

(3)栈与队列的方法(push,pop,shift,unshift)

(4)排序(reverse,sort)

(5)操作方法(concant,slice,splice)

(6)位置的方法(indexOf,lastIndexOf)

(7)迭代的方法(every,some,filter,map,forEach)

1.toString()

使用场景:将数组转换成为字符串,逗号隔开;

返回值:字符串

let arr = [1,2,3];
console.log(arr.toString());
// 打印结果 1,2,3

2.join()

使用场景:数组转换成字符串,使用指定字符隔开;

参数:任意值

返回值:字符串

 let arr = [1,2,3]
 console.log(arr.join('-'));
 //打印结果1-2-3

3.Array.isArray()

使用场景:判断是否是数组;

参数:任意值

返回值:布尔值;

let arr = [1,2,3]
console.log(Array.isArray(arr))
//打印结果 ture

4.Array.from()

使用场景:用类数组或者可以迭代的对象,创建一个新的数组

参数:类数组 或者 可以迭代的对象

返回值:数组

let arr = Array.from('html5');
console.log(arr)
//打印结果 (5) ['h', 't', 'm', 'l', '5']

5.Array.of()

使用场景:根据参数创建数组

参数:任意参数数量或类型

返回值:数组

console.log(Array.of(1,2,3,4))
//打印结果 (4) [1, 2, 3, 4]

6.push()

使用场景:向数组末尾添加一个或者多个元素,并且返回新数组的长度;

参数:可以作为数组元素的任意类型

返回值:新数组的长度

备注:会改变原数组

let arr = [1,2,3]
arr.push(5);
console.log(arr)
//打印结果 (4) [1, 2, 3, 5]

7.pop()

使用场景:删除最后一个元素,并且返回该元素

参数:无

返回值:返回被删除的元素

备注:会改变原数组

let arr = [1,2,3,4,5]
console.log(arr.pop())
//打印结果 5

8.shift()

使用场景:删除第一个元素,并且返回该元素

参数:无

返回值:返回被删除的元素

备注:会改变原数组

let arr = [1,2,3,4,5]
console.log(arr.shift())
//打印结果 1

9.unshift()

使用场景:在数组的开头的位置添加一个或者多个元素,并且返回新数组的长度

参数:任意类型

返回值:返回被删除的元素

备注:会改变原数组

let arr = [1,2,3,4];
arr.unshift(5,6,7)
console.log(arr)
//打印结果 (7) [5, 6, 7, 1, 2, 3, 4]

10.reverse()

使用场景:颠倒数组排序

参数:无

返回值:数组

let arr = [1,2,3,4]
arr.reverse()
console.log(arr)
//打印结果 (4) [4, 3, 2, 1]

11.sort()

使用场景:对数组进行排序

参数:两个

返回值:数组

备注:无参数,按照字符编码的顺序排序

如果升序或者降序,需要提供比较函数

let arr = [44,110,1,5,30,10];
arr.sort(function(a,b){
    //return a-b 升序 
    //return b-a 降序
    //return a=b 原数组
    return a-b
})

console.log(arr)
//打印结果(6[1, 5, 10, 30, 44, 110]

12.concat()

使用场景:连接两个或者多个数组

参数:数组

返回值:被连接数组的副本

备注:不改变原数组

let arr = [1,2,3]
let arr1 = [4,5,6,'ss']
console.log(arr.concat(arr1));
//打印结果 (7) [1, 2, 3, 4, 5, 6, 'ss']

13.slice()

使用场景:方法返回一个新的数组对象,这一对象是一个由 begin 和 end 决定的原数组的浅拷贝(包括 begin,不包括end)。原始数组不会被改变。

参数:slice(begin,end)不包含end

返回值:返回被切下的新数组

备注:slice(开始的位置,结束的位置)不包含结束的位置;

参数可以为负数,表示原数组中倒数第几个元素;

const animals = ['ant', 'bison', 'camel', 'duck', 'elephant'];

console.log(animals.slice(2));
//打印结果(3['camel', 'duck', 'elephant']
//没有第二个参数的时候是剩余的全部

console.log(animals.slice(2, 4));
//打印结果(2['camel', 'duck']

console.log(animals.slice(1, 5));
//打印结果(4['bison', 'camel', 'duck', 'elephant']

14.splice()

使用场景:方法通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。

参数:splice(位置,个数,元素)

返回值:新数组

备注:此方法会改变原数组。

var myFish = ["angel", "clown", "mandarin", "sturgeon"];
var removed = myFish.splice(2, 0, "drum");

// 运算后的 myFish: ["angel", "clown", "drum", "mandarin", "sturgeon"]
// 被删除的元素:[], 没有元素被删除

15.indexOf()

使用场景:方法返回在数组中可以找到给定元素的第一个索引,如果不存在,则返回 -1。

参数:indexOf(元素)

返回值:下标或者-1

const array = [2, 9, 9];
array.indexOf(2);     // 0
array.indexOf(7);     // -1
array.indexOf(9, 2);  // 2
array.indexOf(2, -1); // -1
array.indexOf(2, -3); // 0

16.lastIndexOf()

使用场景:方法返回指定元素(也即有效的 JavaScript 值或变量)在数组中的最后一个的索引,如果不存在则返回 -1。从数组的后面向前查找,从 fromIndex 处开始。

参数:lastIndexOf(元素)

返回值:下标或者-1

let arr = [2,5,9,2]
console.log(arr.lastIndexOf(2))
//打印结果 3

console.log(arr.lastIndexOf(7))
//打印结果 -1

17.every()

使用场景:检测所有的元素是否都能通过某个指定函数的测试。需要所有元素都符合条件才会返回true,否则返回false;

参数:every((element,index,array)=>{},thisArg)

element 用于测试当前的值

index 测试当前值的索引

array 调用every的当前的数组

thisArg 执行callback时的this值

返回值:布尔值

备注:若收到一个空数组,此方法在任何情况下都返回true;

let arr = [1,2,3,4]
let result = arr.every((item)=>{
    return item>1
})

console.log(result);
//打印结果 false

18.some()

使用场景:检测数组中是不是至少有一个元素通过了函数的测试;

参数:some((element,index,array)=>{},thisArg)

element 用于测试当前的值

index 测试当前值的索引

array 调用every的当前的数组

thisArg 执行callback时的this值

返回值:布尔值

备注:若收到一个空数组,此方法在任何情况下都返回false;

    let arr = [1,2,3,4,5]
    let old = arr.some((item)=>item%2===0)
    console.log(old)
    //打印结果 true

19.filter()

使用场景:筛选数组中符合函数的元素

参数:filter((element,index,array)=>{},thisArg)

element 用于测试当前的值

index 测试当前值的索引

array 调用every的当前的数组

thisArg 执行callback时的this值

返回值:由通过函数测试的新数组

备注:给数组做浅拷贝用;不会改变原数组

let arr = [1,2,3,4,5]
const result = arr.filter(item=>item%2===0)
console.log(result)
//打印结果 Array [2, 4]

20.map()

使用场景:创建一个新数组,新数组的元素都是回调函数的返回值

参数:filter((element,index,array)=>{},thisArg)

element 用于测试当前的值

index 测试当前值的索引

array 调用every的当前的数组

thisArg 执行callback时的this值

返回值:新数组

let arr = [9,36,16,4]
let result = arr.map(n=>Math.sqrt(n))
console.log(result)
//打印结果 (4) [3, 6, 4, 2]

21.forEach()

使用场景:对数组的每个元素执行给定的函数

参数:filter((element,index,array)=>{},thisArg)

element 用于测试当前的值

index 测试当前值的索引

array 调用every的当前的数组

thisArg 执行callback时的this值

返回值:undefined

let arr = [1,2,3]
arr.forEach(n=>{
    console.log(n)
})

//打印结果 1 2 3

22.toLocaleString()

使用场景:对数组的每个元素执行给定的函数

参数:toLocaleString(locales,options)

返回值:表示数组元素的字符串

语法

toLocaleString()
toLocaleString(locales)
toLocaleString(locales,options)

备注:

locales带有BCP47语言标记的字符串或者字符串数组;

options一个可以配置属性的对象;对于数字是Number.prototype.toLocalString()

对于日期是Date.prototype.toLocalString()

23.reduce()

使用场景:对数组中的每个元素按序执行一个由您提供的 reducer 函数,每一次运行 reducer 会将先前元素的计算结果作为参数传入,最后将其结果汇总为单个返回值。

第一次执行回调函数时,不存在“上一次的计算结果”。如果需要回调函数从数组索引为 0 的元素开始执行,则需要传递初始值。否则,数组索引为 0 的元素将被作为初始值 initialValue,迭代器将从第二个元素开始执行(索引为 1 而不是 0)。

参数:reduce(function(previousValue, currentValue, currentIndex, array) { /* … */ }, initialValue)

previousValue:上一次调用 callbackFn 时的返回值。在第一次调用时,若指定了初始值 initialValue,其值则为 initialValue,否则为数组索引为 0 的元素 array[0]。

currentValue:数组中正在处理的元素。在第一次调用时,若指定了初始值 initialValue,其值则为数组索引为 0 的元素 array[0],否则为 array[1]。

currentIndex:数组中正在处理的元素的索引。若指定了初始值 initialValue,则起始索引号为 0,否则从索引 1 起始。

array:用于遍历的数组。

返回值:number

const array1 = [1, 2, 3, 4];

// 0 + 1 + 2 + 3 + 4
const initialValue = 0;
const sumWithInitial = array1.reduce(
  (accumulator, currentValue) => accumulator + currentValue,
  initialValue
);

console.log(sumWithInitial);
// 打印结果 10

24.reduceright()

方法接受一个函数作为累加器(accumulator)和数组的每个值(从右到左)将其减少为单个值。

参数:reduceright(function(previousValue, currentValue, currentIndex, array) { /* … */ }, initialValue)

previousValue:上一次调用 callbackFn 时的返回值。在第一次调用时,若指定了初始值 initialValue,其值则为 initialValue,否则为数组索引为 0 的元素 array[0]。

currentValue:数组中正在处理的元素。在第一次调用时,若指定了初始值 initialValue,其值则为数组索引为 0 的元素 array[0],否则为 array[1]。

currentIndex:数组中正在处理的元素的索引。若指定了初始值 initialValue,则起始索引号为 0,否则从索引 1 起始。

array:用于遍历的数组。

返回值:number

const array1 = [[0, 1], [2, 3], [4, 5]];

const result = array1.reduceRight((accumulator, currentValue) => accumulator.concat(currentValue));

console.log(result);
// expected output: Array [4, 5, 2, 3, 0, 1]

25.copyWithin()

描述:浅复制数组的一部分到数组的另一个地方,不会改变数组的长度

const array1 = ['a', 'b', 'c', 'd', 'e'];

// copy to index 0 the element at index 3
console.log(array1.copyWithin(0, 3, 4));
// expected output: Array ["d", "b", "c", "d", "e"]

// copy to index 1 all elements from index 3 to the end
console.log(array1.copyWithin(1, 3));
// expected output: Array ["d", "d", "e", "d", "e"]

语法

copyWithin(target)
copyWithin(target,start)
copyWithin(target,start,end)

参数说明

【target】 0 为基底的索引,复制序列到该位置。如果是负数,target 将从末尾开始计算。如果 target 大于等于 arr.length,将不会发生拷贝。如果 target 在 start 之后,复制的序列将被修改以符合 arr.length。

【start】0 为基底的索引,开始复制元素的起始位置。如果是负数,start 将从末尾开始计算。如果 start 被忽略,copyWithin 将会从 0 开始复制。

【end】0 为基底的索引,开始复制元素的结束位置。copyWithin 将会拷贝到该位置,但不包括 end 这个位置的元素。如果是负数, end 将从末尾开始计算。如果 end 被忽略,copyWithin 方法将会一直复制至数组结尾(默认为 arr.length)。

返回值:改变后的数组

26.find()

描述:返回数组中满足测试函数的第一个元素;否则返回undefined

const array1 = [5, 12, 8, 130, 44];

const found = array1.find(element => element > 10);

console.log(found);
// expected output: 12

27.findIndex()

描述:返回数组中满足测试函数的第一个元素的索引值

const array1 = [5, 12, 8, 130, 44];

const isLargeNumber = (element) => element > 13;

console.log(array1.findIndex(isLargeNumber));
// expected output: 3

28.fill()

描述:用一个固定值填充数组从起始索引到终止索引内的全部元素;不包括终止索引;

const array1 = [1, 2, 3, 4,5,6,7,8];
console.log(array1.fill(0, 2, 4));
// expected output: [1, 2, 0, 0, 5, 6, 7, 8]

29.# includes()

描述:用来判断数组中是否包含某个指定的值

const array1 = [1, 2, 3];

console.log(array1.includes(2));
// expected output: true

30.flat()

描述:按照一个指定的深度递归遍历数组,并且将所有元素合并为一个新的数组返回

const arr1 = [0, 1, 2, [3, 4]];

console.log(arr1.flat());
// expected output: [0, 1, 2, 3, 4]

const arr2 = [0, 1, 2, [[[3, 4]]]];

console.log(arr2.flat(2));
// expected output: [0, 1, 2, [3, 4]]