JavaScript中的Array方法汇总:按照是否修改原数据的方式
数组是我们在js经常用到的数据类型,不好好整理一下怕是容易记混,很多同学傻傻的splice和slice分不清楚,今天就带大家理一下Array中的方法。
方法名称简介是否修改原数据返回值类型注意
Array.prototype.concat()**concat()** 方法用于合并两个或多个数组。否数组const array1 = ['a', 'b', 'c'];
const array2 = ['d', 'e', 'f'];
const array3 = array1.concat(array2);
Array.prototype.copyWithin()**copyWithin()** 方法浅复制数组的一部分到同一数组中的另一个位置,并返回它否数组const array1 = ['a', 'b', 'c', 'd', 'e'];
// copy to index 0 the element at index 3
console.log(array1.copyWithin(0, 3, 4));
Array.prototype.entries()返回一个新的Array Iterator对象否迭代器对象
Array.prototype.every()方法测试一个数组内的所有元素是否都能通过某个指定函数的测试。它返回一个布尔值。否布尔值在方法内修改函数入参,不会修改原数据
Array.prototype.filter()方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素否布尔值注意,在方法内修改入参不会修改原数据
Array.prototype.find()返回数组中满足提供的测试函数的第一个元素的值,否则返回undefined否对象
Array.prototype.findIndex()**indIndex()**方法返回数组中满足提供的测试函数的第一个元素的索引。若没有找到对应元素则返回-1。否数字
Array.prototype.flat()**flat()** 方法会按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回。否数组const arr1 = [0, 1, 2, [3, 4]];
console.log(arr1.flat());
// expected output: [0, 1, 2, 3, 4]
Array.prototype.flatMap()**flatMap()** 方法首先使用映射函数映射每个元素,然后将结果压缩成一个新数组。它与 map 连着深度值为1的 flat 几乎相同,但 flatMap 通常在合并成一种方法的效率稍微高一些。否数组可以理解成map + flat执行后的结果
Array.prototype.forEach()**forEach()** 方法对数组的每个元素执行一次给定的函数。否没有返回值在方法内修改传入参数不会修改原数据
Array.from()**Array.from()** 方法对一个类似数组或可迭代对象创建一个新的,浅拷贝的数组实例。否数组console.log(Array.from('foo'));
// expected output: Array ["f", "o", "o"]
console.log(Array.from([1, 2, 3], x => x + x));
// expected output: Array [2, 4, 6]
Array.prototype.includes()**includes()** 方法用来判断一个数组是否包含一个指定的值,根据情况,如果包含则返回 true,否则返回 false。否布尔值
Array.prototype.indexOf()**indexOf()**方法返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1。否数字
Array.isArray()Array.isArray() 用于确定传递的值是否是一个 Array。否布尔值
Array.prototype.join()**join()** 方法将一个数组(或一个类数组对象)的所有元素连接成一个字符串并返回这个字符串。如果数组只有一个项目,那么将返回该项目而不使用分隔符。否字符串
Array.prototype.keys()**keys()** 方法返回一个包含数组中每个索引键的**Array Iterator**对象。否数组
Array.prototype.lastIndexOf()**lastIndexOf()** 方法返回指定元素(也即有效的 JavaScript 值或变量)在数组中的最后一个的索引,如果不存在则返回 -1。从数组的后面向前查找,从 fromIndex 处开始。否数字
Array.prototype.map()**map()** 方法创建一个新数组,其结果是该数组中的每个元素是调用一次提供的函数后的返回值。否数组
Array.of()**Array.of()** 方法创建一个具有可变数量参数的新数组实例,而不考虑参数的数量或类型。否数组Array.of(2); // [2]
Array.prototype.reduce()**reduce()** 方法对数组中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值。否对象
Array.prototype.reduceRight()**reduceRight()** 方法接受一个函数作为累加器(accumulator)和数组的每个值(从右到左)将其减少为单个值。否对象
Array.prototype.slice()**slice()** 方法返回一个新的数组对象,这一对象是一个由 begin 和 end 决定的原数组的浅拷贝(包括 begin,不包括end)。原始数组不会被改变。否数组
Array.prototype.some()**some()** 方法测试数组中是不是至少有1个元素通过了被提供的函数测试。它返回的是一个Boolean类型的值。否布尔值
Array.prototype.sort()sort() 方法用原地算法对数组的元素进行排序,并返回数组。默认排序顺序是在将元素转换为字符串,然后比较它们的UTF-16代码单元值序列时构建的否数组
Array.prototype.toLocaleString()**toLocaleString()** 返回一个字符串表示数组中的元素。数组中的元素将使用各自的 toLocaleString 方法转成字符串,这些字符串将使用一个特定语言环境的字符串(例如一个逗号 ",")隔开。否字符串
Array.prototype.toString()**toString()** 返回一个字符串,表示指定的数组及其元素。否字符串
Array.prototype.values()values() 方法返回一个新的 Array Iterator 对象,该对象包含数组每个索引的值否数组
Array.prototype.fill()**fill()** 方法用一个固定值填充一个数组中从起始索引到终止索引内的全部元素。不包括终止索引。是数组
Array.prototype.pop()**pop()**方法从数组中删除最后一个元素,并返回该元素的值。此方法更改数组的长度。是数组
Array.prototype.push()**push()** 方法将一个或多个元素添加到数组的末尾,并返回该数组的新长度。是数组
Array.prototype.reverse()**reverse()** 方法将数组中元素的位置颠倒,并返回该数组。数组的第一个元素会变成最后一个,数组的最后一个元素变成第一个。该方法会改变原数组。是数组
Array.prototype.shift()**shift()** 方法从数组中删除第一个元素,并返回该元素的值。此方法更改数组的长度。是数组
Array.prototype.splice()splice() 方法通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。此方法会改变原数组。是数组
Array.prototype.unshift()unshift() 方法将一个或多个元素添加到数组的开头,并返回该数组的新长度(该方法修改原有数组)。是数组
注意,即便有的方法即使是返回了一个新数组,可这个新数组也不一定是被完全复制的,万一里面有个对象呢,嘿嘿嘿,不就共享内存了。总而言之,言而总之,Array中只能实现简单数据类型的数组的拷贝(也就是浅拷贝)