冒泡排序
(相邻)的两个数进行比较,符合条件,交换位置。
/* 冒泡排序:核心-相邻的两个数进行比较,符合条件,交换位置。 小到大 从前到后 9 6 6 4 2 6 9 4 2 4 15 4 2 6 4 2 9 2 15 */ //声明数组 var arr = [9,6,15,4,2]; //轮数 function fnBubbleSortFromSmallToBig(arr){ // 比较的轮数 for(var i = 1;i < arr.length;i ++){ //从数组中取元素---遍历 arr.length - i 表示的是优化代码,减去依次循环后的最大值 for(var j = 0;j < arr.length - i;j ++){ // 进行比较 if(arr[j] > arr[j + 1]){ // 交换位置 var t = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = t; } } } return arr; } function fnBubbleSortFromBigToSmall(arr){ for(var i = 1;i < arr.length;i ++){ //从数组中取元素---遍历 arr.length - i 表示的是优化代码,减去依次循环后的最大值 for(var j = 0;j < arr.length - i;j ++){ if(arr[j] < arr[j + 1]){ var t = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = t; } } } return arr; }
选择排序
依次取一个元素 与 剩下所有元素 进行比较,符合条件,交换位置 。 数组常用方法
/* 选择排序:核心-依次取一个元素与剩下所有的元素进行比较,符合条件,交换位置。 小到大 从前到后 9 6 6 4 2 6 9 4 2 4 15 4 2 6 4 2 9 2 15 */ function fnSelectFromSmallToBig(arr){ //遍历依次取一个元素 for(var i = 0;i < arr.length - 1;i ++){ //遍历 剩下所有的元素 for(var j = i + 1;j < arr.length;j ++){ // 进行比较 if(arr[i] > arr[j]){ var t = arr[i]; arr[i] = arr[j]; arr[j] = t; } } } return arr; } function fnSelectFromBigToSmall(arr){ //遍历 for(var i = 0;i < arr.length - 1;i ++){ //遍历 for(var j = i + 1;j < arr.length;j ++){ if(arr[i] < arr[j]){ var t = arr[i]; arr[i] = arr[j]; arr[j] = t; } } } return arr; }
数组常用方法
增
- unshift(元素,元素,……) : 前增
- 作用:在数组前面添加元素。
- 返回值: 返回新增后数组的长度
- 是否影响原数组: 是
//声明一个数组 var arr = [5,6,7,8,9]; //在前面新增一个元素 console.log(arr.unshift(true,[1,2,3],false)); //8 console.log(arr); //[true,[1,2,3],false,5,6,7,8,9]
- push(元素,元素,……) :后增
- 作用:在数组后面添加元素。
- 返回值: 返回新增后数组的长度
- 是否影响原数组: 是
//声明一个数组 var arr = [5,6,7,8,9]; //在前面新增一个元素 console.log(arr.push(true,[1,2,3],false)); //8 console.log(arr); //[5,6,7,8,9,true,[1,2,3],false]
删
- shift() : 前删
- 作用:删除数组中第1个元素
- 返回值: 被删除的元素
- 是否影响原数组: 是
//声明一个数组 var arr = [5,6,7,8,9]; console.log(arr.shift()); //5 console.log(arr); //[6,7,8,9] //声明一个数组 var arr = [5,6,7,8,9]; // console.log(arr.shift()); //5 // console.log(arr); //[6,7,8,9] //如何删除全部? while(arr.length){ //0 arr.shift(); } console.log(arr);
- pop() : 后删
- 作用:删除数组中最后一个元素
- 返回值: 被删除的元素
- 是否影响原数组: 是
//声明一个数组 var arr = [5,6,7,8,9]; console.log(arr.pop()); //9 console.log(arr); //[5, 6,7,8]
改
- splice(start,delLength,newEle,newEle,……)
start: 从哪个下标位置开始 delLenght: 删除几个元素 newEle : 新元素
- 作用:在数组的任意位置进行增、删、改的操作。
- 返回值: 被删除的元素数组
- 是否影响原数组: 是
//声明一个数组 var arr = [5,6,7,8,9]; console.log(arr.splice(1)); //[6, 7, 8, 9] console.log(arr); //[5] //声明一个数组 var arr = [5,6,7,8,9]; console.log(arr.splice(1,2)); //[6, 7] console.log(arr); //[5,8,9] //声明一个数组 var arr = [5,6,7,8,9]; console.log(arr.splice(1,2,true,[1,2],false)); //[6, 7] console.log(arr); //[5,true,[1,2],false,8,9] //声明一个数组 var arr = [5,6,7,8,9]; console.log(arr.splice(1,0,true,[1,2],false)); //[] console.log(arr); //[5,true,[1,2],false,6,7,8,9]
截
- slice(start,end)
start : 从哪里开始(包含) end : 到哪里结束(不包含)
- 作用:截取数组中指定范围的元素。
- 返回值: 被截取到的元素数组
- 是否影响原数组: 否
//声明一个数组 var arr = [5,6,7,8,9]; console.log(arr.slice(1)); //[6,7,8,9] console.log(arr); //[5,6,7,8,9] //声明一个数组 var arr = [5,6,7,8,9]; console.log(arr.slice(1,4)); //[6,7,8] console.log(arr); //[5,6,7,8,9] // //声明一个数组 // var arr = [5,6,7,8,9]; // console.log(arr.slice(4,1)); //[] // console.log(arr); //[5,6,7,8,9] //声明一个数组 var arr = [5,6,7,8,9]; console.log(arr.slice(-4,-1)); // [6, 7, 8] console.log(arr); //[5,6,7,8,9]
拼
- concat(newEle,newEle,……)
- 作用:将新元素拼接到指定数组的末尾。(如果新元素是一个数组,则去掉最外层的[],将里面的内容进行拼接)
- 返回值: 拼接后的新数组
- 是否影响原数组: 否
//声明一个数组 var arr = [5,6,7,8,9]; console.log(arr.concat(-4,[1,[2,3]],-1)); //[5, 6, 7, 8, 9, -4, 1, [2,3], -1] console.log(arr); //[5,6,7,8,9]
复(面试题:至少写两种复制数组的方法)
截取方法 function copyArr(arr){ return arr.slice(0); } 拼接方法 function copyArray(arr){ return arr.concat(); } 赋值方法 function cloneArr(arr){ var list = []; for(var i = 0,len = arr.length;i < len;i ++){ list[i] = arr[i]; } return list; }
排
- reverse() : 逆序排
- 作用:将数组元素逆序存放
- 返回值: 逆序后的数组
- 是否影响原数组: 是
var arr = [5,6,7,8,9]; console.log(arr.reverse()); //[9,8,7,6,5] console.log(arr); //[9,8,7,6,5]
- sort() : 按编码排
- 作用:将数组中的元素按字符编码从小到大排序
- 返回值: 排序后的数组
- 是否影响原数组: 是
sort(function(a,b){return a - b;}) : 按数字从小到大排序 sort(function(a,b){return b - a;}) : 按数字从大到小排序
var arr = [3,2,10,1,100,20]; console.log(arr.sort()); //[1,10,100,2,20,3] console.log(arr); //[1, 10, 100, 2, 20, 3]
转
- toString() : (面试题:不是数组的方法,是Object对象的方法,数组继承到的方法)
- 数字.toString(2-36) : 将数字转为指定进制的字符串
var i = 10; console.log(i.toString(2)); //1010 console.log(i.toString(8)); //12 console.log(i.toString(16)); //a
数组.toString() : 将数组转为字符串
var arr = [1,2,3,4]; console.log(arr.toString()); //'1,2,3,4' console.log(arr); //[1,2,3,4]
- join('连接符')
- 作用:将数组转为以指定连接符连接成的字符串。
- 返回值: 字符串
- 是否影响原数组: 否
var arr = [1,2,3,4]; console.log(arr.join('+')); //'1+2+3+4' console.log(arr); //[1,2,3,4]
lastIndexOf(元素,start) : 查找元素在数组中从右向左查找第一次出现的下标位置,如果没有找到,返回 -1
var arr = [1,2,3,1,2,3,2,4,2,1]; console.log(arr.indexOf(2,2)); //4 console.log(arr.indexOf(5)); // -1 console.log(arr.lastIndexOf(2)); //8 console.log(arr.lastIndexOf(2,2)); //1 console.log(arr.lastIndexOf(2,5)); //4
1.forEach(function(value,index,array){}) : 遍历数组 value :数组元素 index :数组下标 array :数组
2.map(function(value,index,array){return ...}) : 遍历数组,返回数组 map :遍历数组 ,可以将数组中的每一个元素进行改变,并将改变后的数组返回
3.some(function(value,index,array){return ...}) : 检测数组中每一个元素,如果有一个元素的条件返回true,则直接退出循环,返回true; 如果所有元素都返回false时,最终返回false
4.every(function(value,index,array){return ...}) : 检测数组中每一个元素,如果有一个元素的条件返回false时,则直接退出循环,返回false。 如果所有元素都返回true时,最终返回true.
5.filter(function(value,index,array){return ...}) : 过滤-条件,返回数组
6.reduce(function(prev,next,index,array){return ...}) : 归并