首先咱们要明确如下几点:面试
一、方法是干啥用的; 二、每种方法传递的参数有多少个,每个是什么样的数据类型,每个参数所表明的意思是什么? 三、返回值类型,和表明的意思; 四、重要的:经过此方法,原有的数组是否改变;
数组的这12个方法是面试时常常会问到的内容,你们能够按照以上四个维度来进行记忆和学习。数组
一、push()向数组末尾增长元素; 参数:不肯定个数,并且类型也不肯定,要添加的新元素; 返回:新增长后的数组长度; 原有数组改变; ![图片描述][1] 扩展:不想使用push,也想向数组的末尾增长内容 ary[ary.length] = 10; 即ary.splice(ary.length, 0, 10);
二、unshift()向数组开头增长元素 参数:不肯定个数,并且类型也不肯定,要添加的新元素 返回:新增长后的数组长度 原有数组改变 ![图片描述][2]
三、shift()删除数组第一个元素; 返回值:删除了的值; 原有数组改变; ![图片描述][3]
四、pop()删除数组最后一个元素 返回值:删除了的值; 原有数组改变; ![图片描述][4] 扩展:不用pop想删除最后一项的内容 ary.length--;//ary.length-=1或者ary.length=ary.length-1 即ary.splice(ary.length-1); 【shift() 和 pop(),分别是指从一个数据中的最前面和最后面删除一个值,并返删除值。】
五、splice():它既能实现删除,也能实现增长,还能实现修改 返回的是:删除的项当成新的数组返回; 原有数组是改变的; [删除] ary.splice(n,m) 从索引n开始,删除m个元素,把删除的内容以一个新数组的方式返回,原来的数组改变 ary.splice(n) 从索引n开始,删除到数组的末尾 ary.splice(0) 把原来的数组中每一项都删除掉(清空数组每一项),把以前的每一项的值以一个新的数组返回(把以前的数组克隆了一份如出一辙的,这样的克隆会修改原来的数组) ary.splice() 数组中一项都没有删除,返回的是一个空数组 [修改] ary[2] = 340; 利用对象的操做的方式修改某一项的值 splice(n,m,x) 从索引n开始,删除m个,用x替换删除的部分,把删除的内容以一个新的数组返回,原来的数组改变 [增长] splice(n,0,x) 从索引n开始,一个都不删除(返回结果是一个空数组),把x增长到索引n的前面,原来的数组改变
一、slice():实现数组的截取,在原来的数组中截取某一部分 slice(n,m) 从索引n开始,找到索引为m处(不包含m),将找到的部分已一个新的数组返回,原来的数组不变 slice(n) 从索引n开始一直找到数组的末尾 slice(0)/slice() 把原来的数组克隆一份如出一辙的新数组返回 slice有几种特殊的状况: n或者m为负数 n>m n或者m已经超出了整个数组的范围
2)concat:把两个数组拼接到一块儿,原来的数组不变 ary1.concat(ary2) 把ary2和ary1进行拼接,ary2在后面 ary1.concat() 把ary1克隆一份如出一辙的数组
1)toString:把数组转换为字符串,原来的数组不变 var ary = [12, 23, 34, 45]; var res = ary.toString(); console.log(res);//->"12,23,34,45"
2)join()为数组添加指定的分隔符 参数:能够有,能够是一个分割符(不写默认是","); 返回:分割开后的字符串; 原有数组不变; var ary = [12, 23, 34, 45]; var res = ary.join("+"); console.log(res);//->"12+23+34+45" 扩展:eval->JS中把字符串变为JS表达是执行的一个方法 console.log(eval("12+23+34+45"));//->114 把数组中的每一项进行相加求和 var ary = [12, 23, 34, 45]; console.log(eval(ary.join("+")));
1)reverse:把数组倒过来排列,原来的数组改变
2)sort:给数组进行排序,原有的数组会发生改变 ary.sort() 这样的话只能处理10之内的数字进行排序,由于它是按照UNICODE编码的值进行排序的 ary.sort(function (a, b) {return a - b;}); 由小到大排序 ary.sort(function (a, b) {return b - a;}); 由大到小排序
1)indexOf / lastIndexOf (字符串中也有这两个方法,可是字符串的这两个方法兼容全部的浏览器,而数组的这两个方法是不兼容的) 当前内容在数组中第一次/最后一次出现位置的索引,若是数组中没有这一项,返回的结果是-1,若是有这一项,索引是几就返回几,原来的数组不变 这样的话咱们就能够验证当前的内容在数组中是否存在了 var ary = [12, 34, 230, 54, 34, 25]; if (ary.indexOf("数组") > -1) { //说明"数组"在数组中存在 } else { //说明"数组"在数组中不存在 }
2)forEach / map 都是用来遍历数组中的每一项的 forEach:数组中有几项,咱们的函数就执行几回; 函数中的形参:item->当前遍历的数组中这一项的值 index->当前这一项的索引 原来的数组不变 ary.forEach(function (item, index) { console.log(item, index); });
3)map和forEach的语法是同样的,可是比forEach多加了一个把原来内容进行替换的功能 原来数组不变 返回的新数组是每一项都乘以了10 var newAry = ary.map(function (item, index) { return item * 10; }); console.log(newAry);//->[120, 340, 2300, 540, 340, 250]
var ary = [12, 34, 230, 54, 34, 25]; console.dir(Array.prototype);