ES-数组篇

1. 数组的概念

  1. 存储一组有序的数据,数据类型可以不一样
  2. 数组的作用:一次性存储多个数据
  3. 数组元素:数组中存储的每个数据,叫数组元素,存储了5个数据,有5个数组元素
  4. 数组的长度:数组的元素的个数,叫数组的长度(数组名.length),数组的长度是可以改变的
  5. 索引(下标):存储数组元素的编号,从0开始,到数组的长度-1结束,索引是用来存储和读取数组元素的
  6. 遍历数组:通过循环的方式找到数组中的每个数据
  7. 数组Array是内置对象

2. 数组的定义方式

  1. 通过构造函数定义数组
	var arr = new Array() // 创建了一个空数组
	var arr = new Array(5) // 传入一个参数,表示数组长度,里面有5个空的数组元素
	var arr = new Array(3, 6) // 传入2个以上的参数,表示元素, 里面有两个数组元素3、6
  1. 数组字面量方式定义数组(推荐)
	var 数组名 = [] // 创建一个空数组
	var 数组名 = [1, 2, 3, 4] // 创建一个带初始值的数组

3. Array数组静态方法

《静态方法》
序号静态方法参数描述返回值
1(H5新增)(响应式)Array.isArray(对象)对象判断这个对象是不是数组布尔值
2(ES6)Array.from(伪数组)伪数组将伪数组变成真数组数组

4. Array数组常用的方法

4.1 添加元素方法

《添加元素》
序号方法参数描述返回值
1 (响应式).push(值)数值、字符串、对象把值追加到数组的最后,多个值则用逗号隔开数组长度
2 (响应式).unshift(值)数值、字符串、对象把值追加到数组的最前面,多个值则用逗号隔开数组长度
3.concat(数组,数组,数组,...)数组组合成一个新的数组新数组
4.join("字符串")字符串往数组中每个元素中间添加字符字符串
	演示:
//==========================================
	/*1. .push() 给数组追加元素---最后*/
	var arr = [10, 20]
	arr.push(30, 40)
	console.log(arr)
	// 输出的结果:[10, 20, 30, 40] 
//==========================================
	/*2. .unshift() 给数组追加元素---最前*/
	var arr = [10, 20]
	arr.unshift(30, 40)
	console.log(arr)
	// 输出结果:[30, 40, 10, 20]
//==========================================
	/*3. .concat(数组,数组,数组,...) 合并数组*/
	var arr = [10, 20]
	var arr1 = [30, 40]
	var arr2 = [50, 60]
	arr.concat(arr1, arr2)
	console.log(arr)
	//合并数组结果:[10, 20, 30, 40, 50, 60]
//==========================================
	/*4. .join("字符串") 给数组每个元素中间拼接字符串*/
	var arr=["小红","小绿","小白","小兰","小花"];
    var t1 = arr.join("|");
    console.log(t1)
   // 输出结果: 小红|小绿|小白|小兰|小花  
   // 不传参数直接将数组转为字符串:小红,小绿,小白,小兰,小花        

4.2 删除元素方法

《删除元素》
序号方法参数描述返回值
1 (响应式).pop()删除数组中最后一个元素被删除的元素
2 (响应式).shift()删除数组中第一个元素被删除的元素
	演示:
//==========================================
	/*1. .pop() 删除最后一个元素*/
	var arr = [10, 20, 30]
	arr.pop()
	console.log(arr)
	//输出结果:[10, 20]
//==========================================	
	/*2. .shift() 删除第一个元素*/
	var arr = [10, 20, 30]
	arr.shift()
	console.log(arr)
	//输出结果:[20, 30]

4.3 查询元素方法

《查询元素》
序号方法参数描述返回值
1.indexOf(元素值)数值、字符串、对象查询当前数组中有没有某元素有则此元素索引,无则-1
2(ES6).find(函数)函数找出第一个符合条件的数组成员,然后停止函数有则此元素,无则undefined
3(ES6).findIndex(函数)函数查找第一个符合条件的数组成员,然后结束函数有则此元素索引,无则-1
4(ES6).includes(参数值)数值、字符串、对象查询数组中是否有某个给定值布尔值
	演示:
//==========================================
	/*1. .indexOf(元素值) 查询元素索引*/
	var arr = [11,55,166,22]
    var index = arr.indexOf(55)
  	console.log(index)
  	//输出结果:1
//==========================================
	/*2. .find(函数) 找出第一个符合条件的元素*/
	var arr = [10,20,30]
    var time = arr.find(function (ele) {
        return ele == 30
    })
   console.log(time)
   //输出结果:30
//==========================================
	/*3. .findIndex(函数) 找出第一个符合条件的成员的位置索引*/
	var arr = [10,20,30]
    var index = arr.findIndex(function (ele) {
        return ele == 30
    })
   console.log(index)
   //输出结果:2
//==========================================
	/*4. .includes(参数值) 查询数组中是否有某个给定值*/
	var arr = [10,20,30]
	ver faly = arr.includes(20)
	console.log(faly)
	//输出结果:true

4.4 (替换、删除、插入)元素方法

《替换、删除、插入元素的方法》
序号方法参数描述返回值
1(响应式).splice(开始位置,删除个数,替换值)数值删除、或者是替换,或者是插入元素被删掉的元素
	演示:
//==========================================
	/*1. 删除元素*/
	var arr = ['a', 'b', 'c', 'd']
	arr.splice(2, 1)
	console.log(arr)
	//输出结果:['a', 'b', 'd']
//==========================================
	/*2. 替换元素*/
	var arr = ['a', 'b', 'c', 'd']
	arr.splice(2, 1, 'e')
	console.log(arr)
	//输出结果:['a', 'b', 'e', 'd']
//==========================================
	/*3. 插入元素*/
	var arr = ['a', 'b', 'c', 'd']
	arr.splice(2, 0, 'e', 'f')
	console.log(arr)
	//输出结果:['a', 'b', 'e', 'f', 'c', 'd']

4.5 截取元素方法

《截取元素的方法》
序号方法参数描述返回值
1.slice(开始的索引,结束的索引)数值截取元素放在新的数组中,不包含结束索引的元素新数组
	演示:
//=====================================================================================
	/*1. .slice(开始的索引,结束的索引) 截取数组元素,组成一个新数组,不包含结束索引的元素*/
	let arr1 = [10, 20, 30, 40]
    let arr = arr1.slice(0, 2)
    console.log(arr)
    //输出结果:[10, 20]

4.6 反转数组的方法

《反转数组的方法》
序号方法参数描述返回值
1 (响应式).reverse()反转数组,元素位置反转
	演示:
//======================================================================================
	/*1. .slice(开始的索引,结束的索引) 截取数组元素,组成一个新数组,不包含结束索引的元素*/
	let arr = [10, 20, 30, 40]
    arr.reverse()
    console.log(arr)
    //输出结果:[40, 30, 20, 10]

4.7 数组排序的方法

《数组排序的方法》
序号方法参数描述返回值
1 (响应式).sort(函数)函数排序的,可能不稳定,如果不稳定,请写以下固定代码
	演示:
//========================================
	/*方法二*/
	var arr = [63, 80, 95, 40]
	arr.sort(function (a, b) {
        return a - b  // a-b为升序,b-a为降序
   })
   console.log(arr)
   //输出结果:[40, 63, 80, 95]
   
   sort方法的底层实现:
//========================================================================
	Array.prototype.sort = function (fn) {
         for (var i = 0; i < this.length-1; i++) {
              for (var j = 0; j < this.length-1-i; j++) {
                  var num = fn(this[j], this[j + 1])
                  if (num > 0) {
                      var items = this[j]
                      this[j] = this[j+1]
                      this[j+1] = items 
                  }
              }
         }
         return this
   }

4.8 遍历数组的方法

《遍历数组的方法》
序号方法参数描述返回值
1.forEach(函数)函数遍历数组用---相当于for循环(低版本浏览器中无法兼容)
2.some(函数)函数查找数组中是否有满足条件的元素布尔值
3.every(函数)函数判断这个数组中所有元素是否符合条件,空数组调用返回true布尔值
4.map(函数)函数在函数中处理每个元素,放在新数组中新数组
5.filter(函数)函数返回的是数组中每一个都符合条件的元素,放进新数组新数组
6.reduce(函数,初始值)函数很适合数组求和函数处理结果
	演示:
//====================================================================
	/*1. .forEach(函数) 遍历数组用---相当于for循环(低版本浏览器中无法兼容)*/
	var arr = [10, 20, 40, 60]    
        arr.forEach(function(ele,index){
        console.log(ele+"==="+index)
 		//遍历数组中每一个元素可以加上对应的索引
    })
//====================================================================
	/*2. .some(函数) 查找数组中是否有满足条件的元素,返回布尔值*/
	var t1 = [10, 20, 30, 50, 60, 7, 6]
          var t2 = t1.some(function (ele,index) {
          return ele>10
    })
    //查询数组中有没有大于10的元素,有则返回true,没有返回false
    //如果查找到了第一个满足条件的元素就终止循环
    //只要return true 循环就终止
//====================================================================	
	/*3. .every(函数) 查找数组中是否有满足条件的元素,返回布尔值*/
	var t1 = [10, 20, 30, 50, 60, 7, 6]
          var t2 = t1.every(function (ele,index) {
          return ele>10
    })
    //查询数组中有所有元素是否>10,是则true,不是则false
    //有一个不满足条件就返回false
//====================================================================
	/*4. .map(函数) 数组中的每个元素都要执行这个函数,把执行后的结果重新的全部的
    放在一个新的数组中*/
	var arr = [1,4,9];
       var t1  = []
       t1 = arr.map(function(ele){
       return ele *2
    })
    //把数组的每个元素乘2,放进一个新数组
    //简写:t1 = arr.map(ele => ele*2) 
//====================================================================
	/*5. .filter(函数) 返回的是数组中每一个都符合条件的元素,组成了一个新的数组*/    
	var t1 = [10, 20, 30, 50, 60, 7, 6]
          var t2 = []
          t2 = t1.filter(function (ele) {
          return ele>10
     })
    //把数组中大于10的元素组成一个新的数组
    //简写:t2 = t1.filter(ele => ele>10)
//====================================================================	
	/*6. .reduce(函数,初始值) 很适合数组求和*/
	let arr = [10, 20, 30, 40, 50]
         let sum = arr.reduce(function(preValue,ele){
         return preValue + ele
   }, 0) 
   //注:参数 preValue 的预设值为.reduce(函数,预设值)函数的第二个参数
   //第一次遍历前可以预设,这里设为0,之后循环每次 preValue 的值为上一次函数返回的值
  //注:做数组求和特别合适
  //简写: let sum = arr.reduce((pre,ele) => preValue + n,0)

5. 伪数组 arguments

  1. 当一个函数的参数个数不确定时,可以使用 arguments 来接收参数
  2. arguments 是一个对象(伪数组)
  3. arguments 可以获取函数调用的时候,传入的实参的个数
  4. arguments.length 是实参的个数
  5. arguments[索引] 实参的值
  6. 伪数组转真数组:[].call(arhuments)

6. 冒泡排序

	 	var arr = [1, 2, 3, 4, 5]
        for (var i = 0; i < arr.length-1; i++) { 
            for (var j = 0; j < arr.length-1-i; j++) {
                if (arr[j] < arr[j+1]) {
                    var temp = arr[j]
                    arr[j] = arr[j+1]
                    arr[j+1] = temp
                }
            }
        }

版权声明:本文为weixin_44908855原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。