掘金摸鱼传送门:
https://juejin.im/user/5dddebaef265da05b87952b0/posts
基础函数
1、push和pop
如果学过数据结构对push和pop来说就不陌生,这是对栈的压入和获取(在数组的末尾添加或删除元素);
在js中的语法也与其相同:
const arr = [1, 8, 10, 22, 5]; arr.push(6); console.log(arr); //[1, 8, 10, 22, 5, 6] arr.pop(); console.log(arr); //[1, 8, 10, 22]
2、shift和unshfit
这两个方法就相当于在队列中添加和删除元素(在数组最开始添加或删除元素);
arr.shift(); console.log(arr); //[8, 10, 22] arr.unshift(100); //[100, 8, 10, 22]
3、concat
用于将两个数组连接在一起:
const arr1 = [9, 8, 7, 6]; arr.concat(arr1); //[100, 8, 10, 22, 5, 9, 8, 7, 6]
4、splice
这个参数用于删除数组中的元素,其中有两个参数,第一个参数指的是从哪个位置开始删除,第二个元素指的是删除几个元素:
let a1 = [100, 8, 10, 22, 5, 9, 8, 7, 6]; a1.splice(5,2);
5、slice
slice方法是用来获取一个数组中某个区间内的数值,但不破坏原来数组。有两个参数,第一个参数指的是从哪里开始截取,第二个参数指的是截取到这个位置为止(此位置不截取)
a1.slice();
6、split
将字符创转换为数组:
let s2 = "gengtian"; s2.split('');
7、reverse
将数组反转:
a1.reverse();
8、indexOf
此方法从前往后查找数组中是否有符合条件元素,有则返回第一个符合的索引值,若不存在,则返回 -1
a1.indexof(8);
9、lastindexOf
此方法作用和indexOf相同,不同在于是从后往前查找。
10、includes
判断数中是否包含给定的值;
let arr = [1,2,3,4,5]; let arr1 = arr.includes(2); console.log(arr1); // ture
值得注意的是:includes与indexOf()的区别:
1 indexOf()返回的是数值,而includes()返回的是布尔值
2 indexOf() 不能判断NaN,返回为-1 ,includes()则可以判断
let arr2 = [2, 9, NaN]; let arr3 = arr2.includes(NaN); console.log(arr3); //true
11、Array.from
Array.from() 将伪数组变成数组,就是只要有length的就可以转成数组。
let str3 = '12345'; console.log(Array.from(str3)); // ["1", "2", "3", "4", "5"] let obj1 = {0:'a', 1:'b', 2:'c',length:3}; console.log(Array.from(obj1)); // ["a", "b", "c"]
12、fill
将给定的数值填充到数组中,有三个参数,第一个:是给定值;第二个:是开始填充的位置(若不写默认从0开始);第三个:是结束的位置(若第三个参数不填写则默认填充到最后);
let arr = [1,2,3,4,5]; let arr1 = arr.fill(7); console.log(arr1); // [7,7,7,7,7] let arr2 = arr.fill(7,2); console.log(arr2); //[1,2,7,7,7] let arr3 = arr.fill(7,1,3); console.log(arr3); //[1,7,7,4,5]
13、key
返回的是数组的索引值:
let arr = [1,2,3,4]; let arr1 = arr.keys(); console.log(arr1); //[0,1,2,3]
14、entries
用于遍历数组的键名和键值(索引值和数值)
let arr = [1,2,3,4] let arr1 = arr.entries() for (let e of arr1) { console.log(e); // [0,1] [1,2] [2,3] [3,4] }
高阶函数
1、高阶函数基本简介
高阶函数,顾名思义,比普通函数高级一点,那么,高级哪了呢?一般函数的参数是用于接收变量,而高级函数的参数可以用于接收函数,是不是很高级,很意外?hhh,并没有。是的,只是不同形式的不同叫法而已,写法用法也都完全一样:
普通函数:
function add(a, b){ let temp = a + b; console.log(temp); return temp; }
高阶函数:
function (a, b, f){ return f(a)+ f(b); } function f(s, t){ return s + t; }
这就是我理解的高阶函数。
2、map
map 就是用来遍历一个数组,具体写法:arr.map(),具体如下:
const arr = [1,2,3,4,5,6,7]; arr.map((item)=>{ console.log(item) // 每次打印会分别打印出1、2、3、4、5、6、7 })
3、forEach
forEach和map作用相似都是遍历一个数组,不同之处在于forEach并不会新生成一个数组,也就不需要一个返回值。
const arr = const arr = [1, 8, 10, 22, 5];; arr.forEach((item)=>{ console.log(item) })
4、filter
filter()和map()类似,参数都用来接收一个函数,与map不同的是:filter把传入的函数作用于每个数值,并通过返回值为true或false决定筛选去留,例如:
const arr = [1,2,3,4,5,6]; arr.filter(function(s){ return s>3 })
其中回调函数可接收三个参数:element、index、self分别表示元素、元素在数组中的位置、指代数组本身。
var arr = ['A', 'B', 'C']; var r = arr.filter(function (element, index, self) { console.log(element); // 依次打印'A', 'B', 'C' console.log(index); // 依次打印0, 1, 2 console.log(self); // self就是变量arr return true; });
5、sort
顾名思义,sort方法就是将数组进行排序,那么首先来看你看他的效果吧:
const arr = [1, 8, 10, 22, 5]; console.log(arr.sort());
结果如下:
是不是很好奇为什么排序结果不正确,其实在使用sort方法时,默认先将里面的元素转化为string类型,也就是字符串之间的比较,也就有了10< 22< 5< 8的结果。
但是sort方法也是高阶函数 ,里面的参数也可以用来接收函数。故排序可以为:
const arr = [1, 8, 10, 22, 5]; arr.sort(function(x,y){ if(x>y){ return -1; } else{ return 1; } })
这个问题在项目上经常会遇到,在比较两个数时候要确定两个值是否都为整型,如果为字符串,则在比较时候会发生一些错误,在后期项目维护时候会付出很大的代价。
6、every
此方法用于判断数组中每个元素是否全部符合条件,返回true/false,实例如下:
const arr = [1, 8, 10, 22, 5]; console.log(arr.every(function(s){ return s>1 })) //结果为false
7、some
此方法用于判断数组中的元素是否含有至少一个符合条件,返回true、false:
let arr = [1,2,3,4,5] arr.some( (value, index) =>value<2) //true
8、find
此方法用于判断数组中是否有符合条件的元素,如有,则返回第一个与之匹配元素,否则返回undefined:
const arr = [1, 8, 10, 22, 5]; console.log(arr.find(function(s){ return s==12 })) //undefined console.log(arr.find(function(s){ return s==8; })) //8
9、findIndex
用法都相似,尤其是和find相比,只是返回值不同,find返回匹配元素,findIndex返回这个元素的索引
const arr = [1, 8, 10, 22, 5]; let tempStatus; tempStatus = arr.findIndex(function(s){ return s == 22 }) console.log(tempStatus);