JavaScript数组

数组

数组是存放任意数据类型值的集合,容器。在数组字面量中,数组使用"[]“作为数组的边界,数组由多个元素组成,元素与元素之间通过”,"隔开,元素可以为任意数据类型。数组是一种特殊的对象,通过length属性来获取数组的长度(也就是数组中元素的个数)

1.数组的定义

(1)数组字面量var arr = [ ];
(2)构造函数var arr = new Array();
使用typeof检查一个数组时,会返回object

获取数组中的长度(数组中元素的个数):arr.length

Object,Array,arr的区别:
Object和Array是构造函数(类似于Java的类)
构造函数可以创建对象,Array是一种特殊的对象
Array继承Object,Array是构造arr的构造函数
arr属于Array的一个实例(具体化)

例如:1. 创建一个长度为length的数组:var arr = new Array(length);

	var arr = new Array(2);
	var arr = [undefined,undefined];
  1. 创建一个数组,数组中的元素使用实参初始化:var arr = new Array(p1,p2,...);
	var arr = new Array(1,2,3);
	var arr = [1,2,3];

2. 数组的访问

通过索引来访问,索引从0开始的,直到数组的长度-1,索引可以超过索引范围,只不过访问的值为undefined

		var arr = [1,2,3];      // 索引为:0~2
		arr[0] 		--------> 1
		arr[100] 	--------> undefined

3. 数组的遍历

(1)普通for循环

	var arr = [1,2,3];
	for(var i=0;i<arr.length;i++){
		var item = arr[i];
	}

把遍历封装为一个函数:

fnction each(array){
	for(var i=0;i<arr.length;i++){
		var item = arr[i];
		console.log(item);
	}
}

(2)while循环
(3)do-while循环

(4)增强for循环

for(var key in arr){
	var val = arr
}

4. 数组在内存中的表现

在这里插入图片描述
Array在内存中的表现及Array与arr的关系:
Array === Array.prototype.constructor
在这里插入图片描述
arr可以调用其自身的方法及原型中的方法(Array的原型),但不可以调用构造函数Array中的方法
Array自身的方法:from()、of()、isArray() arr不可调用这些方法

5.数组api

arr可以调用Array.prototype的方法,也可以调用Object.prototype中的方法

api (应用程序编程接口)
从作用、参数、返回值三方面进行学习

(1)添加或者移除元素 【对原值进行了改变】

  1. push() 入栈,将元素添加到数组的最后
    参数:入栈的元素
    返回值:入栈后数组的长度
  2. pop() 出栈,将数组中的最后一个元素移除,并且返回
    参数:none
    返回值:被出栈的元素
  3. shift() 出队,将数组中的第一个元素移除,并且返回
    参数:none
    返回值:被移除的元素
  4. unshift() 插队,将元素添加到数组的最前面
    参数:插队的元素
    返回值:插队后数组的长度

(2)排序方法【改变原值】

  1. reverse() :反转数组项的顺序
  2. sort():可以对数组中的内容按Unicode编码表排序
    默认情况下,按照每位字符在字符编码表中出现的位置进行排序,即使是纯数字的数组

可以给sort()添加一个比较器函数:comparator
comparator要求:

  • 接受两个参数a,b;
  • 如果a在b之前返回-1
  • 如果a在b之后返回1

(3) 截取方法

  1. concat() 【不改变原值】
    数组拼接,先创建当前数组的一个副本,然后将接收到的参数添加到这个副本的末尾,返回数组
    参数:多个数组
    返回值:合并的后的新数组

  2. slice(begin [,end])【不改变原值】
    数组切割,可接受一个或者两个参数,即(返回项的起始位置,结束位置)。

  • 若一个,即表示从该参数指定的位置开始,到当前数组末尾的所有项。
  • 若两个,则表示起始到结束位置之间的所有项,包含起始位置但是不包含结束位置的项。
    参数: begin表示截取的开始位置;end默认为0
    返回值:截取后的子数组
    参数为负数时,切割位置为:数组长度+负数=索引位置
  1. splice()【改变原数组】
    向数组中插入数据,始终返回一个数组。该返回的数组为从原始数组中删除的项。

    • 删除:指定一个参数,删除该参数为索引后的所有项,包含该项
      var arr=[1,2,3,4]
      arr.splice(2)------>arr = [1,2]
      指定两个参数(删除的起始位置,要删除的项个数),包含起始位置
      arr.splice(2,1)------>arr = [1,2,4]
    • 插入:指定三个数(起始位置,0,要插入的项值)
      arr.splice(3,0,100)----->arr = [1,2,3,100,4]插入在索引位置前面
    • 替换:指定三个数(起始位置,要替换的项数,要替换的项值)
      arr.splice(0,2,100)----->arr = [100,3,4]
      返回值:被删除的元素组成的数组

(4)索引方法

  1. indexOf()
    从数组开头向后查找,使用全等操作符,返回查找到的索引位置
    返回查找到的第一个全等值的索引,找到后就不会继续查找
  2. lastIndexOf()
    从数组末尾向前查找,使用全等操作符,返回查找到的索引位置

(5)序列表

  1. JSON
    JSON.stringify():序列化字符串方法
    JSON.parse():将字符串转化为对象

  2. 数组–>字符串
    join():将数组元素转化为字符串
    参数:写的参数是什么,就用该字符串连接arr中的每个元素(默认连接)
    例:arr.join("*");使用*连接arr中的每个元素

(6)迭代

(1)循环方法forEach()
对数组中的每一元素运行给定的函数,没有返回值,常用来遍历元素
例:

var result = arr.forEach(function(item,index,arr){
		console.log(item)	
})
  • item:当前遍历的元素
  • index:索引
  • arr:当前数组

也可以只传一个参数,当只有一个参数时,返回值为当前遍历的元素
两个参数时,返回值为当前遍历元素及其索引

改写myForEach():

Array.prototype.myForEach = function(handler){
		for(var i=0;i<this.length;i++){
				handler.call(this,this[i],i,this)
		}
}
arr.myForEach(function(item,index,arr){})

(2)every【每个】
对数组中的每一运行给定的函数,如果该函数对每一项都返回true,则该函数返回true

   var arr = [11,5,23,7,4,1,9,1];
    var result = arr.every(function(item,index,arr){  return item >2;
    });
    console.log(result); -----------> false(返回布尔值)

当回调函数每次都返回true,返回值才为true
当回调函数有一次返回false,返回值就为false,并且会停止执行

(3) some【存在】
对数组中的每一运行给定的函数,如果该函数对任一项都返回true,则返回true

 var result = arr.every(function(item,index,arr){ 
    		 return item >2;
    });
    console.log(result); ---------> true

当回调函数每次都返回false,返回值才为false
当回调函数有一次返回true,返回值就为true,并且会停止执行

(4)filter【过滤】
对数组中的每一运行给定的函数,会返回满足该函数的项组成的数组

 var result = arr.filter(function(item,index,arr){ 
    	 return item >2;
    });
    console.log(result); --------> [11, 5, 23, 7, 4, 9]

当回调函数返回true的时候,当前元素会被添加到返回值数组中

(5)map【映射】
对数组中的每一元素运行给定的函数,返回每次函数调用的结果组成的数组

   var result = arr.map(function(item,index,arr){  return item * 2;
    });
    console.log(result); -----------> [22, 10, 46, 14, 8, 2, 18, 2]

将回调函数的返回值组成一个新的数组返回

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值