前端小菜从今天开始记录js学习收获,记录内容来自红宝书
首先带来的是array的理解- array的定义
- array的检测
- array常用方法
- 栈方法
- 队列方法
- 排序
- 元素操作
- 位置查找
- 迭代方法
- 归并方法
array的定义
关于数组定义主要有两种方式:构造函数法和字面量法多数人钟情于后者,简单、粗暴
构造函数法
var arr =new Array();
当构造函数法 new Array(n),只有一个参数时,若参数为数字即生成一个length为n的数组,否则便生成只有 一个元素 n的数组
字面量法
var arr =[];
检测数组
Array.isArray()检测某个值是否为数组
接下来是对于数组的一些操作主要涉及到push、pop、shift、unshift、sort、reverse等方法
栈方法(后进先出)
js作为一个动态的脚本语言,可以通过自己的方式去模拟其他语言的功能,从而造就了它的强大
js通过push和pop来模拟了栈的行为
push在数组末尾添加元素,返回数组长度
var arr =['john'];
arr.push('jack'); //return 2 console.log(arr) //'john','jack'
pop实现从数组末尾移除最后一项
arr.pop() //return jack
队列方法(先进先出)
js通过shift和push可以模拟队列行为
push
向数组末尾推入一个元素,shift
从数组前端移除一个元素 shift移除数组中第一个元素,返回删除元素
var arr =['jack','john'];
var newArr = arr.shift(); //jack console.log(arr) //john
与shift对应的还有unshift, unshift是向数组的前端插入任意项
arr.unshift(1,2,3)
console.log(arr) //1,2,3,'john'
排序
数组的排序方法有reverse
和sort
reverse()方法是反转数组顺序
var arr =[1,2,3,4]
arr.reverse() // arr=>4,3,2,1
sort()实现函数排序功能(默认升序排列),在比较之前会调用每个元素的toString()方法,然后进行比较,所以排序结果会与我们的预期(升序或降序)有所出入
为了达到预期效果偶们需要给sort传递一个compare方法function compare(value1,value2){ if(value1{ return -1; }else if (value1>value2){ reutrn 1; }else{ return 0; }}
var arr =[1,4,2,6,5]
arr.sort(compare) console.log(arr) //1,2,4,5,6
当然也有一个简化版比较函数(适应于数值类型和typeOf返回数值类型的对象类型)
function compare(value1,value2){
return value1 -value2; //升序 }
操作方法
concat()
可以基础当前数组所有项创建一个新数组
var arr =[1,2,3];
var arr1 =arr.concat('jack','hello');
arr //1,2,3
arr1 //1,2,3,'john','hello'slice()
基于当前数组的一个或多个项创建一个新数组,slice()
可以接受一个或两个参数,表示返回项的起始和结束位置
var arr =[1,2,3,4,5]
var arr1 =arr.slice() //1,2,3,4,5 arr.slice(1) //2,3,4,5 arr.silce(1,3) //2,3
splice()
可以通过参数控制实现对数组的元素的直接(对原数组操作)删除,插入,替换
var arr =[1,2,3,4,5]
arr.splice(1,2) //2,3 arr //1,4,5
*插入--提供三个参数:起始位置,0(要删除个数),要插入项
var arr =[1,2,3,4,5]
arr.splice(1,0,'jack','john') arr // 1,'jack','john',2,3,4,5
*替换-类似于对插入方法的扩展,只是把插入方法的第二个参数变成非零,即可实现插入的效果
位置方法(indexOf/lastIndexOf)
都接受两个参数:要查找的项和查找起点索引,当省略第二个参数即取默认值0,内部执行(全等)===操作,所以匹配项必须严格相等,查找不到目标元素返回-1
,
var arr =[1,2,34,4,5,7]
arr.indexOf(34) //2 arr.indiexOf(34,3) //-1迭代方法
:给定函数接受三个参数:元素值,索引,当前数组对象
every()对对数组每一元素运行给定函数,都为true则返回truesome()对数组每一元素执行给定函数,任一项返回true,则返回truefilter()对数组每一元素执行给定函数,返回给定函数返回true的值,组成的新数组forEach()对数组每一元素执行给定函数,类似于for *map()对数组每一元素运行给定函数,返回每次调用结果组成的数组var arr =[1,2,3]
every()
var result =arr.every(function(item,index,array){
return item>1 }) result //false
filter()
var newArr = arr.filter(function(item,index,aarray){
return item>1 }) newArr //2,3
map()
var newArr =arr.map(function(ietm,index){
return item*2; }) newArr //2,4,6
归并方法
reducereduceRight
两者区别在于从哪端开始遍历数组reduce()
接受四个参数:前一个值,当前值,索引数组对象
var arr=[1,2,3]
var newArr = arr.reduce(function(prev,cur,index,array){ retnrn prev + cur }); newArr //6 函数的返回值会作为是一个参数(prev),传递给下一项
END...