数组方法
ES5方法
Array.prototype开头的。只要是prototype 那么就是给实例用的。
-
Array.prototype.push(),接收任意数量的参数,把它们逐个添加到数组末尾,并返回修改后数组的长度。
-
Array.prototype.pop(),从数组末尾移除最后一项,减少数组的length值,然后返回移除的项。
-
Array.prototype.unshift(),在数组前端添加任意个数选项并返回新数组的长度。
-
Array.prototype.shift(),移除数组中的第一个项并返回该项,同时将数组长度减1。
-
Array.prototype.splice(),向数组的中部插入项。
整体格式:
arr.splice(起始项,删除的个数,要插入的项目1,要插入的项目2......)
-
删除,可以删除任意数量的项,只需指定2个参数:要删除的第一项的位置和要删除的项数,返回删除的项组成的数组,原数组被更改。
-
替换,可以向指定位置插入任意数量的项,且同时删除任意数量的项,只需要指定3个参数:起始位置、要删除的项数、要插入的任意数量的项(插入的项数不必与删除的项数相等)。
-
插入,可以向指定位置插入任意数量的项,只需要提供3个参数:起始位置、0(要删除的项数)、要插入的项目(要插入的项目可以传入任意多个项)。
-
-
Array.prototype.concat(value1,…,valuen),基于当前数组中的所有项创建一个新数组。这个方法会先创建当前数组一个副本,然后将接收到的参数添加到这个副本的末尾。最后返回新构建的数组。
-
Array.prototype.join(),使用指定的字符串拼接数组中的每个元素,组成一个字符串。
如果说不给join方法传递任何值,或者传递给他一个undefiend,则使用逗号作为分隔符。
-
Array.prototype.reverse(),反转数组项的顺序,返回反转后的原数组。
-
Array.prototype.slice(),基于当前数组中的一个或多个项创建一个新数组(该方法不会影响原始数组),返回值是一个新数组。
- 一个参数,返回从该参数指定位置到当前数组末尾的所有项。
- 两个参数,该方法返回起始和结束位置之间的项(但是不包括结束位置的项);
- 一个都不写,该方法返回从0开始一直到最后元素的一个新数组。
-
Array.prototype.sort([sortFunc]),按升序排列数组项(最小的值位于最前面,最大的值排在最后面)。排序后改变原数组。
-
不传递参数的情况下,sort()方法会调用每个数组项的toString()方法然后比较得到的字符串。即使都是数值也是按照字符串来进行比较。
-
sort可以接收一个函数作为参数,让这个函数作为排序的规则。
这个函数接收两个参数,分别是要比较的两个值。
如果第一个参数应该位于第二个参数之前需要返回一个附属,如果两个参数相等则返回0,如果第一个参数应该位于第二个之后则返回正数。
排序规则:
// val1-val2 升序 // val2-val1 降序 var values = [0,5,1,15,10]; values.sort(function(val1,val2){return val1 - val2;//0 - 5 = -5 // return val2 - val1;//5 - 0 }); console.log(values);
-
-
Array.prototype.toString(),返回数组的字符串表示。
-
Array.prototype.indexOf(),查找指定的值并返回要查找的项在数组中的位置。没有找到返回-1。比较使用全等操作符。
注意:
- indexOf()方法接受两个参数,要查找的项和要查找的起点位置(可选的)。第二个参数如果不写默认从0开始向后查找。
- 进行查找时使用的是全等操作。
-
Array.prototype.forEach(),对数组中的每一项运行给定函数,这个方法没有返回值(返回值是
undefiend
)。forEach
和for
循环都可以遍历数组,他们的区别在于:- forEach只能遍历数组(因为它是Array.prototype上查找方法),for可以遍历类数组。
- forEach只能遍历完,for可以中途使用break退出。
-
Array.prototype.map(),对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。
-
Array.prototype.filter(),对数组中的每一项运行给定函数,返回该函数会返回true的项组成的数组。
-
Array.prototype.every(),对数组中的每一项运行给定函数,如果该函数中每一项都返回true,则返回true
-
Array.prototype.some(),对数组中的每一项运行给定函数,如果该函数对任一项返回true,则返回true。
-
Array.isArray(value),确定value是否是数组,如果是数组返回true否则返回false。
ES6
-
Array.from():方法用于将类数组对象转为真正的数组:类数组对象(array-like object,有length属性和索引元素)和可遍历对象。
const str = 'hello'; const arr = Array.from(str); console.log(arr); // 输出: ['h', 'e', 'l', 'l', 'o']
-
Array.of():用于将一组值转换为数组。返回新数组。
const arr = Array.of(1, 2, 3); console.log(arr); // 输出: [1, 2, 3]
-
find(): 方法会返回数组中满足提供的测试函数的第一个元素的值,若没有符合条件的元素,则返回 undefined。
const numbers = [1, 2, 3, 4, 5]; const found = numbers.find(num => num > 3); console.log(found); // 输出: 4
-
findIndex(): 方法返回数组中满足提供的测试函数的第一个元素的索引,若没有符合条件的元素,则返回 -1。
const numbers = [1, 2, 3, 4, 5]; const index = numbers.findIndex(num => num > 3); console.log(index); // 输出: 3
-
fill(): 方法用一个固定值填充一个数组中从起始索引到终止索引内的全部元素,不包括终止索引。
const arr = [1, 2, 3, 4, 5]; arr.fill(0, 1, 3); console.log(arr); // 输出: [1, 0, 0, 4, 5]
-
copyWithin() 方法浅复制数组的一部分到同一数组中的另一个位置,并返回它,不会改变原数组的长度。
const arr = [1, 2, 3, 4, 5]; // 从索引 3 开始复制元素到索引 0 的位置 arr.copyWithin(0, 3); console.log(arr); // 输出: [4, 5, 3, 4, 5]
-
entries() 方法返回一个新的数组迭代器对象,该对象包含数组中每个索引的键 / 值对。
const arr = ['a', 'b', 'c']; const iterator = arr.entries(); for (const [index, value] of iterator) {console.log(index, value); } // 输出: // 0 'a' // 1 'b' // 2 'c'
-
keys() 方法返回一个新的数组迭代器对象,它包含数组中每个索引的键。
const arr = ['a', 'b', 'c']; const iterator = arr.keys(); for (const key of iterator) {console.log(key); } // 输出: // 0 // 1 // 2
-
values() 方法返回一个新的数组迭代器对象,它包含数组中每个索引的值。
const arr = ['a', 'b', 'c']; const iterator = arr.values(); for (const value of iterator) {console.log(value); } // 输出: // 'a' // 'b' // 'c'
-
includes() 方法用来判断一个数组是否包含某个特定的值,返回 true 或 false。
该方法主要用来替代indexOf()
,因为indexOf()
是全等运算
,而NaN
和NaN
也不相等const arr = [1, 2, 3]; console.log(arr.includes(2)); // 输出: true