今天整理下javascript和数组相关的所有方法(函数)吧。感兴趣的可以收藏以后多看看
生成数组相关方法
1、Array构造函数
2、Array.of()
3、Array.from()
数组原型方法
添加删除类
1、push()和 pop()
2、unshift() 和 shift()
操作数组类
5、join()
6、slice()
7、splice()
8、fill()
9、concat()
10、sort()
11、reverse()
12、copyWithin()
13、flat() 和 flatMap()
14、reduce()和 reduceRight()
查找判断类
15、indexOf() 和 lastIndexOf()
16、every()
17、some()
18、includes()
遍历数组类
19、forEach()
20、map()
21、find()
22、findIndex()
23、filter()
24、entries()
25、keys()
25、values()
用于实例化一个数组,传的参数将作为数组的成员
var arr = new Array(1,2)
console.log(arr)
// 输出
[1, 2]
如果只传一个参数,且参数的类型是number,那么将会实例化一个长度为参数的数组
var brr= new Array(10)
console.log(brr)
console.log(brr.length)
// 输出
[]
10
感觉是不是有点怪?传一个参数和多个参数,有时候居然会不一样。下个方法刚好解决了这一点
始终返回一个包含当前参数的数组
var arr = Array.of(1,'aaa',3)
console.log(arr)
var brr = Array.of(10)
console.log(brr)
console.log(brr.length)
// 输出
[ 1, 'aaa', 3 ]
[ 10 ]
1
可以将一个类数组对象(如伪数组或者可以迭代的对象)转化为一个真正的数组
function aaa () {
console.log(arguments) // arguments参数集合是一个伪数组
let arg = Array.from(arguments)
console.log(arg)
}
aaa(1, 'aaa', 3)
// 输出
[Arguments] {
'0': 1, '1': 'aaa', '2': 3 }
[ 1, 'aaa', 3 ]
当如果传递两个参数时,第二个参数可以传递一个映射函数,此时可以创建一个符合函数规则的数组,即可以将伪数组中的每一项按照函数定义的规则转换为新的数组
function aaa () {
console.log(arguments)
let arg = Array.from(arguments, val => val + '___')
console.log(arg)
}
aaa(1, 'aaa', 3)
// 输出
[Arguments] {
'0': 1, '1': 'aaa', '2': 3 }
[ '1___', 'aaa___', '3___' ]
push() :用于向数组的末尾添加元素,可同时添加多个,并返回数组新的长度
var arr = [1,2,3]
var len = arr.push(4,5,6)
console.log(len)
console.log(arr)
// 输出
6
[1,2,3,4,5,6]
pop() :删除数组最后一个元素,并返回被删除的元素
arr = [1,2,3,4,5]
let num = arr.pop()
console.log(num)
console.log(arr)
// 输出
5
[ 1, 2, 3, 4 ]
unshift() : 从数组的头部插入元素,可同时插入多个,并返回数组新的长度
var arr = [1,2,3,4,5]
let len = arr.unshift('a', 'b')
console.log(len)
console.log(arr)
// 输出
7
['a', 'b', 1, 2, 3, 4, 5]
shift() : 将数组的第一个元素删除,并返回删除的元素
var arr = [1,2,3,4,5]
let num = arr.shift()
console.log(num)
console.log(arr)
// 输出
1
[2,3,4,5]
用于将数组中的元素,按指定的分隔符连接成一个字符串
var arr = [1,2,3,4]
console.log(arr.join('-'))
// 输出
'1-2-3-4'
var arr = [1,3,4,6,8,9]
var brr = arr.slice(2)
var crr = arr.slice(1,4)
var drr = arr.slice(-4, -1) // 相当于 arr.slice(2, 5)
console.log(arr)
console.log(brr)
console.log(crr)
console.log(drr)
// 输出
[ 1, 3, 4, 6, 8, 9 ]
[ 4, 6, 8, 9 ]
[ 3, 4, 6 ]
[ 4, 6, 8 ]
实现删除
var arr = [1,2,3,4,5]
arr.splice(1,2) // 表示从下标1开始,删除2个数
console.log(arr)
// 输出
[ 1, 4, 5 ]
实现新增
var arr = [1,4,6,8]
arr.splice(1, 0, 2, 3) // 第二个参数为0代表删除个数为0, 即不删除
console.log(arr)
// 输出
[ 1, 2, 3, 4, 6, 8 ]
实现替换
var arr = [1,4,6,8]
arr.splice(1, 1, 2, 3) // 第二个参数为1代表删除1个数, 然后插入后面的2和3
console.log(arr)
// 输出
[ 1, 2, 3, 6, 8 ]
var arr = [1,2,3,4,5]
arr.fill('a')
var brr = [1,5,8,2,7]
brr.fill('b', 2)
var crr = [2,5,7,2,9]
crr.fill('c', 2, 4)
console.log(arr)
console.log(brr)
console.log(crr)
// 输出
[ 'a', 'a', 'a', 'a', 'a' ]
[ 1, 5, 'b', 'b', 'b' ]
[ 2, 5, 'c', 'c', 9 ]
用于连接一个或者多个数组,该方法不会改变原数组,而是返回一个新的数组
var arr = [1,3,5,7]
var brr = [2,4,6,8]
var crr = [11,22,33]
var drr = arr.concat(brr, crr)
console.log(drr)
console.log(arr)
console.log(brr)
console.log(crr)
// 输出
[ 1, 3, 5, 7, 2, 4, 6, 8, 11, 22, 33]
[ 1, 3, 5, 7 ]
[ 2, 4, 6, 8 ]
[ 11, 22, 33 ]
当连接的不是数组时(比如数字或者字符串),会直接加入到数组当中
var arr = [1,3,5,7]
console.log(arr.concat('aaa', 'bbb', [11,22]))
// 输出
[1, 3, 5, 7, 'aaa', 'bbb', 11, 22]
对数组进行排序,可按照字母顺序或者数字大小进行升序或者降序排序(非数字或者字母排序不会生效),会改变原数组
var arr = ['b', 'd', 'a', 'g']
arr.sort()
console.log(arr)
var brr = [2,5,1,13,4,8]
brr.sort()
console.log(brr)
var crr = ['张三','李四','王五','陈六']
crr.sort()
console.log(crr)
// 输出
[ 'a', 'b', 'd', 'g' ]
[ 1, 2, 23, 34, 5, 8 ]
[ '张三', '李四', '王五', '陈六' ]
通过上面可以看出,默认排序是升序,但是当为数字时,我们发现好像只以每个数字的第一位数字进行了比较,而并不是以整个数字的大小去做比较。
为了解决这个问题,我们可以给sort()方法传递一个比较函数,这个比较函数接收两个参数,如果第一个参数应该位于第二个之前则返回一个负数,如果两个参数相等则返回 0,如果第一个参数应该位于第二个之后则返回一个正数
function compare(val1, val2) {
if (val1 < val2) {
return -1;
} else if (val1 > val2) {
return 1;
} else {
return 0;
}
}
var arr = [2,5,1,13,4,8]
arr.sort(compare)
console.log(arr)
// 输出
[ 1, 2, 4, 5, 8, 13 ]
如果想实现降序,那么只需要将函数内 1和-1调换一下位置就好
function compare(val1, val2) {
if (val1 < val2) {
return 1;
} else if (val1 > val2) {
return -1;
} else {
return 0;
}
}
var arr = [2,5,1,13,4,8]
arr.sort(compare)
console.log(arr)
// 输出
[ 13, 8, 5, 4, 2, 1 ]
用于将数组顺序颠倒,会改变原数组
var arr = [1,21,8,43,5]
console.log(arr.reverse())
// 输出
[ 5, 43, 8, 21, 1 ]
var arr = [1,2,3,4,5,6,7,8]
arr.copyWithin(2, 0) // 从索引0开始复制,此时其实复制了全部,从索引2开始粘贴,但因为整个数组长度只有8,故只能粘贴下6个数字。但实际复制了8个数字
console.log(arr)
var brr = [1,2,3,4,5,6,7,8]
brr.copyWithin(2, 0, 3) // 从索引0开始复制,复制到索引3结束,代表复制了1,2,3。从索引2开始粘贴
console.log(brr)
// 输出
[1, 2, 1, 2, 3, 4, 5, 6]
[1, 2, 1, 2, 3, 6, 7, 8]
flat() :该方法可以按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回。但不传参时,默认表示遍历深度为1。
该方法不会改变原数组,会返回一个新的数组
var arr = [1,2,[3,4,[5,6]]]
console.log(arr.flat())
console.log(arr.flat(2))
console.log(arr)
// 输出
[ 1, 2, 3, 4, [ 5, 6 ] ]
[ 1, 2, 3, 4, 5, 6 ]
[ 1, 2, [ 3, 4, [ 5, 6 ] ] ]
flatMap() : 该方法对原数组的每个成员执行一个函数,,然后对返回值组成的数组执行flat()方法。
// 相当于 [[1, 2], [2, 4], [3, 6], [4, 8]].flat()
var arr = [1, 2, 3, 4].flatMap((x) => [x, x * 2])
console.log(arr)
// 输出
[1, 2, 2, 4, 3, 6, 4, 8]
var arr = [1,2,3,4,5,6]
var total = arr.reduce((pre, cur, index, self) => {
console.log(cur)
return pre + cur
})
var total2 = arr.reduceRight((pre, cur, index, self) => {
console.log(cur)
return pre + cur
})
console.log(total)
console.log(total2)
// 输出
2
3
4
5
6
5
4
3
2
1
21
21
var arr = [1,3,5,8,12,5,2,6]
console.log(arr.indexOf(5))
console.log(arr.lastIndexOf(5)) // 从后面开始找,优先找到12和2中间的那个5,返回它的索引
console.log(arr.indexOf(8, 1)) // 从索引1开始找
console.log(arr.lastIndexOf(12, 1)) // 从索引1开始找,即从3开始往前找,故没有找到12,返回-1
console.log(arr.lastIndexOf(12, 6)) // 从索引6开始找,即从2开始往前找,找到了12,返回它的索引
// 输出
2
5
3
-1
4
var arr = [1,2,3,4,5,6,7]
var arr1 = arr.every(item => item < 10)
var arr2 = arr.every(item => item < 5)
console.log(arr1)
console.log(arr2)
// 输出
true
false
var arr = [5, 10, 15, 20, 25, 30]
var arr1 = arr.some(item => item > 40)
var arr2 = arr.some(item => item < 9)
console.log(arr1)
console.log(arr2)
// 输出
false
true
var arr = [1,3,5,7,9, NaN]
console.log(arr.includes(5))
console.log(arr.includes(5, 3)) // 从索引3开始往后查找,即从7开始往后找,故没有找到,返回false
console.log(arr.includes(NaN))
console.log(arr.indexOf(NaN))
// 输出
true
false
true
-1
var arr = ['张三','李四','王五']
arr.forEach((item, index, self) => {
console.log(`我是${
item},我的索引值是${
index}`)
console.log(self)
})
// 输出
我是张三,我的索引值是0
[ '张三', '李四', '王五' ]
我是李四,我的索引值是1
[ '张三', '李四', '王五' ]
我是王五,我的索引值是2
[ '张三', '李四', '王五' ]
var arr = [1,3,5,7,9]
var brr = arr.map((item, index, self) => {
if (item > 3) {
return item + 1
} // 当不符合条件时,没有return,会默认返回undefined
})
console.log(brr)
// 输出
[ undefined, undefined, 6, 8, 10 ]
var arr = [1, 2, 5, 7, 9]
var obj = {
name: '张三'}
var num = arr.find(function (item) {
console.log(this)
return item % 3 === 0
}, obj)
console.log(num)
// 输出
{
name: "张三"}
{
name: "张三"}
{
name: "张三"}
{
name: "张三"}
{
name: "张三"}
9
var arr = [1, 2, 5, 7, 9]
var obj = {
name: '张三'}
var num = arr.findIndex(function (item) {
console.log(this)
return item % 3 === 0
}, obj)
console.log(num)
// 输出
{
name: "张三"}
{
name: "张三"}
{
name: "张三"}
{
name: "张三"}
{
name: "张三"}
4
var arr = [1, 3, 5, 7, 9]
var brr = arr.filter(function (item, index, self) {
return item % 3 === 0
})
console.log(brr)
// 输出
[ 3, 9 ]
var arr = ['张三','李四','王五']
var brr = arr.entries()
console.log(brr)
for (let [index, item] of brr) {
console.log(index, item)
}
// 输出
Array Iterator {
}
0 张三
1 李四
2 王五
var arr = ['张三','李四','王五']
var brr = arr.keys()
console.log(brr)
for (let index of brr) {
console.log(index)
}
// 输出
Array Iterator {
}
0
1
2
var arr = ['张三','李四','王五']
var brr = arr.values()
console.log(brr)
for (let value of brr) {
console.log(value)
}
// 输出
Array Iterator {
}
张三
李四
王五
整理完了,有需要的拿去用吧