第二章 js数组
问题:想要在数组中搜索一个特定值,并且返回他的索引
indexOf :检测首次出现的位置
lastIndexOf:检测最后一次出现的位置
两个方法都接受一个开始索引,它设定了从哪里开始搜索
问题:用concat()和apply()将一个二维数组扁平化
var arr=[] arr[0]=["ABC ","ert"] arr[1]=["eetr","ewrer"."ererr"] arr[2]=["line","erey"] var newarr=arr.concat.apply([],arr) console.log(newarr[5]) //line
二维数组的扁平化就是将二维数组变成一维
问题,想要在数组中找到给定的出现值,删除掉该元素,或者用另一个值替换他
var arr=["dog","cat","seal","walrus","lion","cat"] animals.splice(animals,indexOf("walrus"),1) //dog,cat ,seal,lion,cat animals.splice(animals.lastindexOf("cat"),1,"monkey") //dof,cat,lion,monkey
splice()方法接受三个参数,第一个参数是索引值,第二个是删除的数目,如果不写,则删除到最后(包括索引处的值) ,如果设置为零则不删除,第三个参数是替换元素
问题:想要从一个数组提取一部分,但是保持最初的数组完整性
js提供了一个slice()方法,来提取一个已有数组的一部分的一个浅拷贝,slice(start,end),start,end为数组下标,前闭后开
slice()方法复制一个已有的数组的一部分,返回一新的数组,他执行浅拷贝,也就是说,如果数组元素是对象,两个数组都指向相同的对象,对数组中的对象进行修改,会在旧的数组的相同的对象中反映出来
var marr=[] marr[0]=["apple","pear"]; marr[1]=["strawberry",'lemon']; marr[2]=["lime","peach","berry"]; var narr=marr.slice(1,2) console.log(marr[1]) //[strawberry,lemon] narr[0][0]="raspberry" console.log(narr[0]) // ["raspberry","lemon"] console.log(marr[1]) // ["raspberry","lemon"]
如果元素数组是一个基本数据类型,例如字符串或数字,就不会产生修改一个影响另一个的情况
arr.forEach()
forEach()方法接受一个回调函数作为参数
而这个回调函数有三个参数
item 数组项 index 索引值 array 数组自身
var arr=["ab","bb","cd","cc","ab","dd","ab"] function replace(item,index,self){ if(item=="ab"){ arr[index]="**" } } arr.forEach(replace) console.log(arr)// ["**","bb","cd","**","cc","**","dd","**"]
注意:不要给forEach的函数返回一个值,这个值会被被丢弃
问题:想要把一个十进制的数组转换为一个新的数组,其中他们都是等价的十六进制数
toString(16) 可以可将十进制转为十六进制
var decArray=[23,255,122,5] var hexarray=decArray.map(function(element){ return element.toString(16) }) console.log(hexArray) //["17","ff","7a","5"]
forEach()和map()的区别
map()方法的结果是一个新的数组,而不是修改最初的数组,因此,使用forEach()的时候不会反回一个值,但是使用map()的时候必须反回一个值
filter()方法也是接受一个回调函数应用于每一数组元素
作为参数传递给filter()方法的函数返回一个布尔值,true或false,这个返回值决定了该数组元素是否添加到一个新的数组当中,如果函数返回true,将会添加,否则删除
var charSet=["**","bb","cd","%%"] var newArray=chartSet.filtert(function(element){ return(element !=="**") })
ES6解构赋值来简化数组赋值
var stateValues=[459,144,96,34,0] var [a,b,c,d]=statevalues console.log(b) //144