数组的方法
push
- 作用:向数组末尾追加项(可以是一项或者多项)
- 参数:添加的具体项(可以是一项或者多项)
- 返回值:新数组的长度
- 是否改变原数组:改变
var ary = [1, 2, 3];ary.push(4);console.log(ary);var res = ary.push(5);// ary.push的返回结果为新数组的长度console.log(res); // 5
unshift
- 作用:向数组的开头追加项
- 参数:添加的具体项(可以是一项或者多项)
- 返回值:新数组的长度
- 是否改变原数组:改变
var ary1 = [2, 3, 5];ary1.unshift(1);console.log(ary1); // [1, 2, 3, 5]var res1 = ary1.unshift(0);console.log(res1); // 5
pop
- 作用:删除数组末尾的项
- 参数:无
- 返回值:删除的末尾项
- 是否改变原数组:改变
var ary2 = [1, 2];ary2.pop();2 // 返回值console.log(ary2);[1] // 删除末尾项后的新数组undefined
shift
- 作用:删除数组的开头项
- 参数:无
- 返回值:删除的开头项
- 是否改变原数组:改变
splice
- 作用:从索引n开始删除m项,并且用x进行替换
- 参数:splice(n, m, x);
- 返回值:返回值是一个数组,数组里边是删除的项
- 是否改变原数组:改变
var ary = [1, 2, 3, 4, 5];// 把索引1,2两项 替换为5,6var res = ary.splice(1, 2, 5, 6);res; // [2, 3]ary; // [1, 5, 6, 4, 5]
只删除不替换
var res1 = [1, 2, 3];undefinedres1.splice(1, 2);(2) [2, 3] // 删除项的数组res1;[1] // 新数组
splice实现增加项
var res2 = [0, 1, 2];undefinedres2.splice(2, 0, 5); // 在索引2的前面删除0项,并且替换为5[] // 删除项的数组res2;(4) [0, 1, 5, 2]
思考题!!
删除数组最后一项
- ary.pop();
- ary.splice(ary.length-1, 1);
-
数组的末尾追加项的三种方法
ary.push();
- ary.splice(ary.length, 0, 8);
- ary[ary.length] = 8;
slice
- 作用:从索引n开始复制到索引m结束(不包含第m项)
- 参数:slice(n, m)
- 返回值:复制的新数组
- 是否改变原数组:不改变
- 注意:
- 如果不写参数m ==> 从索引n开始一直复制到最后一项
- 复制整个数组:ary.slice() 或者 ary.slice(0)
var res = [1, 2, 3, 4, 5];undefinedres.slice(1, 3);(2) [2, 3] // 复制的新数组var res1 = slice();var res1 = res.slice();res1(5) [1, 2, 3, 4, 5]var res2 = res.slice(0);res2; // [1, 2, 3, 4, 5]console.log(res1 == res2); // false res1和res2的空间地址不同undefined
concat(拼接数组)
- 作用:拼接数组
- 参数:可以是拼接的一项,或者数组
- 返回值:拼接后的新数组
- 是否改变原数组:不改变
var ary = [1, 2, 3];undefinedary.concat(1); // [1, 2, 3, 1]ary // [1, 2, 3]
toString()
- 作用:转为字符串
- 参数:无
- 返回值:转化为字符串的值
- 是否改变原数组:不改变
join
- 作用:那数组转换为字符串,并且用指定的连接符链接
- 参数:连接符
- 返回值:用连接符连接之后的字符串
- 是否改变原数组:不改变
var ary1 = [1, 2, 3, 4];undefinedary1.join("-");"1-2-3-4"ary1.join("+");"1+2+3+4"eval(ary1.join("+"));10
reverse
- 作用:实现数组的倒序
- 参数:无
- 返回值:倒序之后的数组
- 是否改变原数组:改变
var res = [1, 2, 3, 4];undefinedres.reverse();(4) [4, 3, 2, 1]res;(4) [4, 3, 2, 1]
sort 排序
- 作用:实现数组的排序
- 参数:无/函数
- 返回值:倒序之后的数组
- 是否改变原数组:改变
- 注意:
- 如果不传参数,只能排10以内的;10以外的可以跟一个函数
// 不传参数,排序10以内var ary = [4, 5, 8, 3, 7];undefinedary.sort();(5) [3, 4, 5, 7, 8]// 参数为函数时,可以排序任意数值var ary1 = [11, 2, 5, 9, 7, 55, 5, 1];undefinedary1.sort(function (a, b) {return a-b; }); //a-b 升序(8) [1, 2, 5, 5, 7, 9, 11, 55]ary1.sort(function (a, b) {return b-a; }); // b-a 降序(8) [55, 11, 9, 7, 5, 5, 2, 1]
indexOf
- 作用:检索某项在数组中首次出现的位置(索引)
- 参数:index(n, m)
- n:检索的项
- m:从哪开始检索
- 返回值:索引/-1
- 是否该变原数组:不改变
- 注意:
- 如果数组中不包含那项,返回值为-1;通过这个可以判断数组中是否包含某项
var ary = [1, 5, 6, 8, 4, 8, 1, 0, 5];undefinedary.indexOf(1);0 // 1首次在索引0处出现ary.indexOf(7);-1 // 7不在数组中ary.indexOf(1, 0);0 // 从索引0处开始检索首次出现1的索引值ary.indexOf(1, 1);6 // 从索引1处开始检索首次出现1的索引值
lastIndexOf
- 作用:检索某项在数组中最后出现的位置(索引)
- 参数:index(n, m)
- n:检索的项
- m:到哪结束检索(包含最后一项)
- 返回值:索引/-1
- 是否该变原数组:不改变
- 注意:
- 如果数组中不包含那项,返回值为-1
var ary3 = [1, 5, 6, 8, 4, 8, 1, 0, 5];undefinedary3.lastIndexOf(1);6ary3.lastIndexOf(1, 6); // 到索引为6的值时结束检索(包含最后一项)6ary3.lastIndexOf(1, 5);0
includes
- 作用:检测数组是否包含某项
- 参数:检测的项
- 返回值:布尔值
- 是否改变原数组:不改变
forEach
- 作用:遍历数组中的每一项
- 参数:函数(item, index) item是每一项的值 index是每一项的索引
- 返回值:undefined
- 是否改变原数组:不改变
var ary = [1, 5, 6, 8, 4, 8, 1, 0, 5];undefinedary.forEach(function(item, index){console.log(item+" ---"+index)});VM237:1 1 ---0VM237:1 5 ---1VM237:1 6 ---2VM237:1 8 ---3VM237:1 4 ---4VM237:1 8 ---5VM237:1 1 ---6VM237:1 0 ---7VM237:1 5 ---8undefined // 返回值undefined (因为没有return ,默认return undefined;)
map
- 作用:把一个数组映射成一个新的数组
- 参数:函数
- 返回值:映射后的新数组
- 是否改变原数组:否
// map映射var ary3 = [1, 2, 3, 4, 5, 6];var res = ary3.map(function (item,index) {return `<li>${item}nizhenbang!!</li>`;})console.log(res);
数组去重!!
1、双for循环去重
- 原理:依次拿出数组中的每一项,和他后面的所有剩余项进行比较,如果有相同数字就删除
function unique(ary5) {for (i=0;i<ary5.length-1;i++) {var getItem = ary5[i];for (j=i+1;j<ary5.length;j++) {if(getItem == ary5[j]) {ary5.splice(j,1);// 删除一项后,(数组会发生变化)数组的每一项对应索引会变化,所以索引--,以对应删除重复项后的新数组j--;}}}return ary5;}var ary5 = [1, 1, 1, 2, 2, 23, 3, 35, 4, 5, 5, 4];var res = unique(ary5);console.log(res);
2、利用对象进行数组去重
- 原理:首先创建一个空对象,去遍历数组中的每一项,把数组的每项作为对象的属性名和属性值,給此对象添加;添加的过程中,如果对象中已经包含此项,说明重复,则在数组中删除此项。
// 2、利用对象去重function unique2(ary6) {// 首先创建一个空对象var obj = {};for (i=0;i<ary6.length;i++) {var item = ary6[i];// 判断对象中是否已经包含此项if (obj[item] == item) {ary6.splice(i,1);i--;// 结束本次循环,继续下一次循环continue;}// 数组中的某一项添加到对象中// 数组中的某一项当成属性名和属性值obj[item]=item;}return ary6;}var ary6 = [1, 2, 3, 3, 3, 5, 5, 8, 9, 9, 9, 10, 10];var res = unique2(ary6);console.log(res);
3、利用新数组去重
function unique3(ary) {var newAry7 = [];for (i=0;i<ary.length;i++) {/* // 如果新数组中不包含此项,就給新数组pushif (newAry7.indexOf(ary[i]) == -1) {newAry7.push(ary[i]);} */// 如果新数字中包含此项,结束本次循环,继续下一次循环if (newAry7.indexOf(ary[i]) > -1) {continue;}newAry7.push(ary[i]);}return newAry7;}var ary7 = [1, 1, 1, 1, 1, 5, 8, 47, 8];var res7 = unique3(ary7);console.log(res7);
