JavaScript-4数组

什么是数组

数组对象是使用单独的变量名来存储一系列的值。
如果你有一组数据(例如:车名字),存在单独变量如下所示:

var car1=“Saab”;
var car2=“Volvo”;
var car3=“BMW”;
然而,如果你想从中找出某一辆车?并且不是3辆,而是300辆呢?这将不是一件容易的事!
最好的方法就是用数组。
数组可以用一个变量名存储所有的值,并且可以用变量名访问任何一个值。
数组中的每个元素都有自己的的ID,以便它可以很容易地被访问到。

创建一个数组

创建一个数组,有三种方法。
下面的代码定义了一个名为 myCars的数组对象:
1: 常规方式:

var myCars=new Array();
myCars[0]="Saab";      
myCars[1]="Volvo";
myCars[2]="BMW";

2: 简洁方式:

var myCars=new Array("Saab","Volvo","BMW");

3: 字面:

var myCars=["Saab","Volvo","BMW"];

访问数组

通过指定数组名以及索引号码,你可以访问某个特定的元素。
以下实例可以访问myCars数组的第一个值:

var name=myCars[0];

以下实例修改了数组 myCars 的第一个元素:

myCars[0]="Opel";

tip: [0] 是数组的第一个元素。[1] 是数组的第二个元素。

在一个数组中你可以有不同的对象

所有的JavaScript变量都是对象。数组元素是对象。函数是对象。

因此,你可以在数组中有不同的变量类型。

你可以在一个数组中包含对象元素、函数、数组:

myArray[0]=Date.now;
myArray[1]=myFunction;
myArray[2]=myCars;

数组方法和属性

使用数组对象预定义属性和方法:

var x=myCars.length             // myCars 中元素的数量
var y=myCars.indexOf("Volvo")   // "Volvo" 值的索引值

Array对象方法(列举常用的)

1、获取数组字符串
  • valueOf()方法返回数组的元素字符串
  • toString()方法可以把数组转换为字符串,并返回结果
  • toLocaleString()返回数组中每个元素本地化表示形式
  • join(seperator) 返回一个字符串,由每个元素转换而成的字符串使用指定的separator拼接而成
var numbers = [2123,'hello',new Date()];
document.write(numbers+"<br>");
document.write(numbers.valueOf()+"<br>");
document.write(numbers.toString()+"<br>");
document.write(numbers.toLocaleString()+"<br>");
document.write(numbers.join("-")+"<br>");
2、连接数组
  • concat()拼接两个或更多的数组,并返回结果
    语法:arrObject.concat(arr1,arr2,…);
    该方法不会改变现有数组,仅仅返回一个拼接后的副本;
    每个参数可以是一个值,也可以是一个数组
    可以接收任意多个参数
3、获取子数组
  • slice()返回现有数组的一个子数组
    语法:arrObject.slice(start1,end);
    参数start指定从哪个下标开始获取;若取值为负数,则表示从尾部开始算起,如-1指最后一个元素,-2指倒数第二个元素
    参数end指定结束处的下标(不包含);可以省略或取负值
4、修改数组
  • splice从数组中删除一部分元素,并添加另一部分元素
    语法:arrObject.splice(start,count,e1,e2…);
    参数start: 指定添加/删除的起始位置,可取负值
    参数count: 要删除的元素个数,0表示不删除
    e1,e2… 在start处新添加的项
    返回被删除的项目;现有数组内容会改变
5、倒转数组
  • reverse() 颠倒数组中元素的顺序
    语法:arrObject.reverse()
    现有数组内容会改变
6、数字排序
  • sort() 用于对数组中元素由小到大进行排序
    语法:arrObject.sort(sortby);
    若未指定参数,则按元素的Unicode码排序;也可以指定元素比较函数sortby,按其返回的正负值作排序的依据。
    现有数组内容会改变
7、进出栈操作-栈方法

栈是一种LIFO(Last-In-First-Out, 后进先出)的数据结构

  • push()入栈,在栈顶添加指定的元素,并返回新的长度
  • pop()出栈,删除并返回栈顶的元素
8、队列方法

队列数据结构的访问规则是FIFO(First-In-First-Out 先进先出)。

  • shift() 移除数组中的第一个项,并返回该项
  • unshift() 在数组的前端添加任意多个项,并返回数组的长度
9、位置方法
  • indexOf()
    接收两个参数,要查找的项目,查找起点的位置索引(可选)

  • lastIndexOf()
    接收两个参数,要查找的项目,查找起点的位置索引(可选)
    可返回一个指定的字符串值最后出现的位置,
    在一个字符串中的指定位置从后向前搜索。

    两个函数都是返回要查找的项在数组中的位置,在没有找到的情况下返回-1。在比较第一个参数与数组中的每一个项时,使用全等操作符。

10、迭代方法

ECMASCRIPT 5为数组定义了5个迭代方法,每个方法接收两个参数,要在每一项上运行的函数和运行该函数的作用域对象的值。传入这些方法的函数会接收三个参数:数组项的值,该项在数组中的位置和数组对象本身。

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

测试数组的所有元素是否都符合指定函数的条件,只要有一个元素不符合,返回都会是false
语法:array.every(callbackfn[,thisArg])
every()方法为数组中的每个元素执行一次callbackfn 函数,直到它找到一个使callbackfn返回false(表示可转换为布尔值false的值)的元素,如果发现了一个这样的元素,every()方法将会立即返回false。否则,callbackfn为每一个元素返回true,every()就返回true

  • filter(): 对数组中的每一项运行给定函数,返回该函数会返回true的项组成的数组。

filter() 方法使用指定的函数callbackfn测试所有元素,并创建一个包含所有通过测试的元素的新数组。
语法:array.filter(callbackfn[,thisArg])
filter为数组中的每个元素调用一次callbackfn函数,并利用所有者使得callbackfn返回true或等价于true的值的元素创建一个新数组。callbackfn只会在已经赋值的索引上被调用。

  • forEach(): 对数组中的每一项运行给定函数,该方法没有返回值

让数组的每一项都执行一次给定的函数
语法:array.forEach(callbackfn[, thisArg])
参数
array 必选,一个数组对象
callbackfn 必选,最多可以接受三个参数的函数,对于数组中的每个元素,forEach都会调用callbackfn 函数一次
thisArg 可选,callbackfn 函数中的this关键字可引用的对象。如果省略thisArg, 则undefined 将用作this值

  • map() 对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。

map()方法返回一个由原数组中的每个元素调用一个指定函数callbackfn后的返回值组成的新数组。如果符合callbackfn会返回符合条件的一个值,将所有返回的值再创建一个新数组。
语法: array.map(callbackfn[,thisArg])
map方法会给原数组中的每个元素都按顺序调用一次callbackfn函数。callbackfn每次执行后的返回值组合起来形成一个新数组。

  • some() 对数组中的每一项运行给定函数,如果对任一项返回true,则返回true。

some()方法和every()方法类似,不同的是,some()方法在调用指定的函数callbackfn指定的条件符合就返回true,不符合则返回false。

11、缩小方法

ECMASCRIPT 5增加了两个缩小数组的方法,reduce() 和 reduceRight().
两个方法都会迭代数组的所有项,然后构建一个最终的返回的值。其中 reduce()方法从数组第一项开始,逐个遍历到最后。reduceRight() 则从数组最后一项开始,向前遍历。

两个方法都接收两个参数,一个在每一项上调用的函数和(可选)作为缩小基础的初始值。传给reduce() 和 reduceRight()的函数接收4个参数,一个前一个值,当前值,项的索引和数组对象。这个函数返回的任何值都会作为第一个参数自动传给下一项。第一次迭代发生在数组的第二项上。

reduce()
语法:array.reduce(callbackfn,[initialValue])

reduce() 方法接收callbackfn 函数,这个函数包含四个参数:
funciton callbackfn(preValue, curValue, index, array){
}

参数:preValue 上一次调用回调返回的值,或者是提供的初始值(initialValue)
curValue 数组中当前被处理的数组项
index 当前数组项在数组中的索引值
array 调用reduce方法的数组

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值