数组常用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]]