7. 数组基本操作及案例

案例----经典面试题

冒泡排序 : (相邻)的两个数进行比较,符合条件,交换位置

选择排序 : (依次)取一个元素 与 剩下所有元素进行比较,符合条件交换位置

冒泡排序如下

 //声明数组
 var arr = [9,6,15,4,2];

    //轮数
function fnBubbleSortFromSmallToBig(arr){

    for(var i = 1;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;
}
    //声明数组
    var arr = [9,6,15,4,2];

function fnBubbleSortFromBigToSmall(arr){

    for(var i = 1;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 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 前增在数组前面添加元素返回新增后数组的长度
push  后增在数组后面添加元素返回新增后数组的长度
shift  前删删除数组中的第一个元素,一次只能删除一个被删除的元素
pop  后删删除数组中最后一个元素被删除的元素
splice 改在数组的任意位置进行增删改的操作被删除的元素
slice  截截取数组中指定范围的元素拼接后的新数组
concat 拼将新元素拼接到指定数组的末尾,如果新元素是一个数组,则去掉最外面的 [ ]将里面的内容进行拼接拼接后的新数组
reverse  逆序排将数组元素逆序存放逆序后的数组
sort 按编码排将数组中的元素,按字符编码从小到大排序排序后的数组
join 连接符将数组转为以指定连接符连接成的字符串
  toString  转这个不是数组的方法,是object对象的方法,数组继承到的方法字符串

ES5新增【都不会影响原数组】

1. indexOf(元素,start)查找元素在数组中第一次出现的下标位置,如果没有则返回 -1
2. lastIndexOf(元素,start)查找元素在数组中从右到左查找第一次出现的下标位置,如没有找到,返回 -1
3. forEach(function (value, index ,array){})遍历数组
4. map(function (value,index,array){} )遍历数组,返回数组
5. some(function (value , index, array){return ...})检测数组中的第一个元素,如果有一个元素的条件返回 true,则直接退出循环,返回true,如果所有元素都返回false时,最终返回 false
6. every(function (value,index,array{return ...})检测数组中的每一个元素,如果有一个元素的条件,返回false时,则直接退出循环,返回false,如果所有元素都返回true时,最终返回true
7. filter(function (value,index,array{return ...}) 过滤条件;返回数组
8. reduce(function (prev,next,index,array){return ...})归并
9. find()用于找出第一个符合条件的数组成员,它的参数是一个回调函数所有数组成员,依次执行该回调函数直到找出第一个返回值为true的成员,然后返回该成员,如果没有找到符合条件的成员,则返回unde

上菜

1. 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]

2.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]

3. shift  前删

//声明一个数组
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);

4.pop  后删

 //声明一个数组
    var arr = [5,6,7,8,9];
    console.log(arr.pop()); //9
    console.log(arr); //[5, 6,7,8]

5. splice  改

        splice(start,delLength,newEle,newEle...)

                start: 从哪个下标位置开始

                delLength: 删除几个元素

                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]

6. slice  截

        start(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]

7. concat  拼

//声明一个数组
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]

8. 复  copy || clone

        面试题:至少写两种 复制 数组的方法

1.function copyArr(arr){
    return arr.slice(0);
}
function copyArray(arr){
    return arr.concat();
}


2.function cloneArr(arr){
    var list = [];
    for(var i = 0,len = arr.length;i < len;i ++){
        list[i] = arr[i];
    }
    return list;
}

9. 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]

10. 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]

11. 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]

 12. join 连接符

        

var arr = [1,2,3,4];
console.log(arr); //[1,2,3,4] 原数组
console.log(arr.join('+')); //'1+2+3+4'

ES5 新增 【不会影响原数组】

1. indexOf(元素 ,start): 要查找的那个元素在数组中 第一次出现的下标位置,如果没有,则返回 -1

    var arr = [1,2,3,1,2,3,2,4,2,1];
    console.log(arr.indexOf(2,2)); //4    查找元素2, 从第二个开始数
    console.log(arr.indexOf(5)); // -1

2. 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

3.forEach(function(value,index,array){}) : 遍历数组

4.map(function(value,index,array){return ...}) : 遍历数组,返回数组

5.some(function(value,index,array){return ...}) : 检测数组中每一个元素,如果有一个元素的条件返回true,则直接退出循环,返回true; 如果所有元素都返回false时,最终返回false

6.every(function(value,index,array){return ...}) : 检测数组中每一个元素,如果有一个元素的条件返回false时,则直接退出循环,返回false。 如果所有元素都返回true时,最终返回true.

7.filter(function(value,index,array){return ...}) : 过滤-条件,返回数组

8.reduce(function(prev,next,index,array){return ...}) : 归并

var arr = [99,100,89,59,98];
var sum = arr.reduce(function(prev,next){
    console.log(prev,next);
    // prev = 99  next = 100
    //prev = 199 next = 89
    // prev = 288 next = 59
    //prev = 347  next = 98
    //prev = 455
    return prev + next;
})
alert(sum);

var sum = arr.reduce(function(prev,next){
    console.log(prev,next);
    // prev = 0  next = 99
    //prev = 99 next = 89
    return prev + next;
},0)
alert(sum);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值