数组下

204 阅读5分钟

indexOf方法

查找某个元素在数组中第一次出现的位置

语法:

arr.indexOf(元素,[开始查找的起始下标]);
# 参数1:将要查找的元素
# 参数2:可选项。从哪个下标开始往后查找
# 返回值:如果找到了,就返回这个元素在数组中的下标,如果没有找到,就返回-1

例:

var arr = [1,3,5,7,7,5,3,1];
console.log(arr.indexOf(5)); // 2 - 查找数字5在数组中第一次出现的下标
console.log(arr.lastIndexOf(5)); // 5 - 查找数字5在数组中最后一次出现的位置
console.log(arr.indexOf(5,3)); // 5 - 从下标2开始查找数字5在数组中第一次出现的位置
console.log(arr.lastIndexOf(5,4)); // 2 - 从下标4开始查找数字5在数组中最后一次出现的下标
console.log(arr.indexOf("5")); // -1 - 数组中全是数字,找不到字符串5,所以返回-1
  • lastIndexOf

  • forEach方法

    用于遍历数组

    语法:

    arr.forEach(function(值, 下标, 当前数组){
    	// 代码段
    });
    # 在这个方法中需要传入一个函数参数,这个函数的参数说明如下:
    # 参数1:数组遍历出来的每个值
    # 参数2:可选项。数组遍历出来的每个值对应的下标
    # 参数3:可选项。被遍历的当前数组
    

    例:

    var arr = [1, 2, 3, 4, 5];
    arr.forEach(function(x, index, a){
    	console.log(x + '|' + index + '|' + (a === arr));
    });
    // 输出为:
    // 1|0|true
    // 2|1|true
    // 3|2|true
    // 4|3|true
    // 5|4|true
    

    使用说明:

    这个方法没有返回值,返回值为undefined,不会改变原来数组的值。

  • map方法

    遍历数组,并将每个元素经过函数处理后,形成新的元素,所有新元素组成新数组返回

    语法:

    arr.map(function(值,下标,当前数组){
    	return 新的值 - 通常新的值是由旧的值处理以后得到
    });
    

    例:

    var arr = [1, 2, 3, 4, 5];
    var arr2 = arr.map(function(item){
    	return item*item;
    });
    console.log(arr2); //[1, 4, 9, 16, 25]
    

    使用说明:

    这个方法主要用于以同样的规则处理数组中的每个值,并组成新的数组返回

  • filter方法

    将数组中满足指定条件的值,组成新的数组返回

    语法:

    arr.filter(function(值, 下标, 当前数组){
    	return 筛选条件
    });
    

    例:

    var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
    var arr2 = arr.filter(function(v, index) {
    	return v>5
    }); 
    console.log(arr2); //[6, 7, 8, 9, 10]
    

    使用说明:

    使用方法和功能跟map方法很像,只是运行规则不一样。map方法中的函数,用于返回新的元素,而filter方法中的函数,根据返回true或false来筛选元素

  • reduce方法

    用于数组求和

    语法:

    arr.reduce(function(a, b){
    	return a + b
    });
    

    其中a第一次的时候,表示第一个元素,第二次开始表示上一次返回的数据,b第一次表示第二个元素,第二个开始表示第三个元素、第四个元素。。。

  • some - 判断数组中是否至少有一个元素是满足指定条件的,返回布尔值

    语法:

    布尔值 = 数组.some(function(v,i,a){
        return 条件;
    })
    // 上面的i和a是可选参数
    

    例:判断所有成绩中是否有不及格的成绩

    var arr = [68,95,78,56,86,63];
    var bool = arr.some(function(v,i,a){
        return v<60;
    });
    console.log(bool); // true
    

    some内置的原理,遍历数组,判断每个值是否满足条件,有满足的就返回true,并break循环,遍历完以后都没有一个是满足的,返回false

    var arr = [68,95,78,56,86,63];
    var k = 0
    var bool = arr.some(function(v,i,a){
        k++
        return v<60;
    });
    console.log(bool); // true
    console.log(k); // 4
    
    var arr = [68,95,78,66,86,63];
    var k = 0
    var bool = arr.some(function(v,i,a){
        k++
        return v<60;
    });
    console.log(bool); // false
    console.log(k); // 6
    
  • every - 判断数组中是否所有元素都满足指定的条件,返回布尔值

    语法:

    布尔值 = 数组.every(function(){
        return 条件
    })
    // 上面的i和a是可选参数
    

    例:判断是否所有成绩都及格了

    var arr = [68,95,78,56,86,63];
    var bool = arr.some(function(v,i,a){
        return v>60;
    });
    console.log(bool); // false
    

    every内置的原理,遍历数组,判断每个值是否满足条件,有不满足的就返回false,并break循环,遍历完以后都满足,返回true

    var arr = [68,95,78,56,86,63];
    var k = 0
    var bool = arr.every(function(v,i,a){
        k++
        return v>60;
    });
    console.log(bool); // false
    console.log(k); // 4
    
    var arr = [68,95,78,66,86,63];
    var k = 0
    var bool = arr.every(function(v,i,a){
        k++
        return v>60;
    });
    console.log(bool); // true
    console.log(k); // 6
    
  • find - 查找数组中第一个满足指定条件的值,找到返回值,找不到返回undefined

    语法:

    值 = 数组.find(function(v,i,a){
        return 条件
    })
    // 上面的i和a是可选参数
    

    例:找出所有成绩中第一个不及格的成绩

    var arr = [68,95,78,56,86,63];
    var ele = arr.find(function(v,i,a){
        return v<60
    })
    console.log(ele); // 56
    

    find的原理,遍历数组,判断每个元素是否满足条件,满足就返回这个元素,并break循环,如果遍历完了都没有满足条件的,就返回undefined

    var arr = [68,95,78,56,55,86,63];
    var k = 0
    var ele = arr.find(function(v,i,a){
        k++
        return v<60;
    });
    console.log(ele); // 56
    console.log(k); // 4
    
    var arr = [68,95,78,66,86,63];
    var k = 0
    var ele = arr.find(function(v,i,a){
        k++
        return v<60;
    });
    console.log(ele); // undefined
    console.log(k); // 6
    
  • findIndex - 查找数组中满足条件的第一个对应的下标,找到返回下标,找不到返回-1

    语法:

    下标 = 数组.findIndex(function(v,i,a){
        return 条件
    })
    // 上面的i和a是可选参数
    

    例:找出所有成绩中第一个不及格的成绩的下标

    var arr = [68,95,78,56,86,63];
    var index = arr.find(function(v,i,a){
        return v<60
    })
    console.log(index); // 3
    

    findIndex的原理,遍历数组,判断每个元素是否满足条件,满足就返回这个元素的下标,并break循环,如果遍历完了都没有满足条件的,就返回-1

    var arr = [68,95,78,56,55,86,63];
    var k = 0
    var index = arr.find(function(v,i,a){
        k++
        return v<60;
    });
    console.log(index); // 3
    console.log(k); // 4
    
    var arr = [68,95,78,66,86,63];
    var k = 0
    var index = arr.find(function(v,i,a){
        k++
        return v<60;
    });
    console.log(index); // -1
    console.log(k); // 6
    

七、冒泡排序

相邻两个元素进行比较,将一个数组中的数字使用循环进行升序或降序的排列

转存失败,建议直接上传图片文件

var arr = [3,2,1]; // ---> [1,2,3]
// 相邻的元素比较,就是下标i的元素跟下标i+1的元素比较 - 所以循环要比正常的遍历少一次
for(var i=0;i<arr.length-1;i++){
    // 如果前面的元素比后面的元素大
    if(arr[i]>arr[i+1]){
    	// 则交换位置
        var tmp = arr[i]
        arr[i] = arr[i+1]
		arr[i+1] = tmp
    }
}
// 这个循环结束后,arr变为:[2,1,3]
// 所以需要继续排列
for(var i=0;i<arr.length-1;i++){
    // 如果前面的元素比后面的元素大
    if(arr[i]>arr[i+1]){
    	// 则交换位置
        var tmp = arr[i]
        arr[i] = arr[i+1]
		arr[i+1] = tmp
    }
}
// 这个循环结束后,arr变为:[1,2,3]
// 两个循环代码是重复的,所以用循环处理。3个元素循环两次,4个元素循环3次,所以循环重复的次数也是数组长度-1
for(var j=0;j<arr.length-1;j++){
    for(var i=0;i<arr.length;i++){
        if(arr[i]>arr[i+1]){
        	var tmp = arr[i]
            arr[i] = arr[i+1]
            arr[i+1] = tmp
        }
    }
}
// 如果要降序排序,就将判断条件中的>改为<即可

八、选择排序

降序:先找最大值,排在最左边,再找第二大的值,往左边靠...,已经排好的,不再参与比较

转存失败,建议直接上传图片文件

var arr = [3,2,1]; // ---》 [1,2,3]
// arr[0]放最小的值,所以将arr[0]跟后面所有值比较,如果有比arr[0]更小的,就跟arr[0]交换位置
for(var i=1;i<arr.length;i++){
    if(arr[0]>arr[i]){
    	var tmp = arr[0]
        arr[0] = arr[i]
        arr[i] = tmp
    }
}
// 此时的数组:[1,3,2]
// 第1个位置的数字排好了,排第2个位置上的数字
// arr[1]放剩下的数字中最小的,使用arr[1]跟后面的数字比较,如果有比arr[1]更小的,就跟arr[1]交换位置
for(var i=2;i<arr.length;i++){
    if(arr[1]>arr[i]){
    	var tmp = arr[1]
        arr[1] = arr[i]
        arr[i] = tmp
    }
}
// 此时的数组:[1,2,3]
// 重复代码用循环处理,3个数排2次,4个数排3次
for(var j=0;j<arr.length-1;j++){
    for(var i=j+1;i<arr.length;i++){
        if(arr[j]>arr[i]){
        	var tmp = arr[j]
            arr[j] = arr[i] 
            arr[i] = tmp
        }
    }
}
// 如果要进行降序排列,就将判断条件中的>换成<即可