js_Array

Js之Array类型

(1)区别于其他语言:(a)数组每一项可以保存任何类型的数据;(b)大小可以动态调整

(2)创建数组2种方法:(a)var colors=new Array([num]or”greg”,”blue”...)(b)var colors=[“red”,”blue”,”green”]

//(b)种方法还可以有“读取,修改,新增”的功能

例:alert(colors[0]);//显示

colors[2]=”black”;//修改

Colors[3]=”brown”;//新增

数组的length属性不是只读的,可以通过设置这个属性,可以从数组末尾移除或添加新项。移除位置的值或新添加的位置(但没给定值)为undefined.

(3)检测数组

(a) if(value instanceof Array){//对数组执行某些操作}

(b) if(Array.isArray(value)){//对组织执行某些操作}

(4)转换方法:这3个方法都会返回由数组中每个值的字符串形式拼接而成的以逗号分隔的字符串。

toLocaleString() //为了取得每一次项的值,调用的是每一项的toLocaleString()

toString()

valueOf()// 后台调用的也是toString()方法

以上3种默认的是逗号分隔,如果采用join(“符号”),可以指定符号分隔,如果不传参,或传入undefined,则仍使用逗号作为分隔符。

注意:若数组中,某一项是null或undefined,那么该值在这几个方法返回的结果中以空字符串表示。

(5)栈方法(这两种方法都是对数组末尾进行操作,相当于栈顶)

push() //可以接受任意数量的参数,把它们逐个添加到数组末尾,并返回数组的长度。

pop() //从数组末尾移除最后一项,减少数组的length,然后返回移除的项。

(6)队列方法

push() //可以接受任意数量的参数,把它们逐个添加到数组末尾,并返回数组的长度。

shift() //可以移除数组的第一个项并返回该项,同时数组长度减1.

----反队列

unshift()//可以在数组前端添加任意个项,并返回数组的新长度。

因此可以使用unshift()和pop()模拟反队列

关于unshift()---利用该方法向数组前端添加数据时,例如添加2次

color.unshift(“a”,”b”,”c”); color.unshift(“1”,”2”);则color数组的元素顺序为1,2,a,b,c注意

注意:2个移除的方法,pop和shift都是返回移除的项,添加的2个方法push和unshift都是返回新数组的长度。

(7)重排序方法

reverse() //数组反序

sort() //这个方法重点注意!!sort()方法按升序排列数组项,为了实现排序,sort()方法会调用每个数组项的toString()转型方法,然后比较得到的字符串,以确定如何排序。即使数组中的每一个项都是数值,sort()方法比较的也是字符串,例

var values=[0,1,4,10,15];

values.sort();alert(values);//0,1,10,15,4

由此可以看出,这种方式在很多情况下不上最佳方案,因此sort()方法可以接受一个比较函数作为参数,以便我们指定哪个值位于哪个值前面。

function compare(value1,value2){

if(value1<value2){

return -1;

}else if(value1>value2){

return 1;

}else{

return 0;

}

}//该比较函数适用于大多数数据类型,只要将其作为参数传递给sort()方法即可。

values.sort(compare);

alert(values);//0,1,4,10,15

对于数值类型或其valueOf()方法会返回数值类型的对象类型,可以使用一个更简单的比较函数:function compare(value1,value2){

return value2-value1; }

(8)操作方法

concat() //连接数组---基于当前数组中的所有项创建一个新数组,具体而言,这个方法会创建当前数组的一个副本,然后将接收到的参数添加到这个副本的末尾,最后返回这个新构建的数组。若无参数,则复制当前数组并返回副本。

slice(A[,B]) //截取数组---接受1或2个参数,即返回项的起始与结束位置,当只有A时,返回从A开始到数组末尾的所有项;当有A和B时,返回范围为[A,B),该方法不影响原数组,返回的是新数组。若参数中有负数,则用数组长度加负数确定位置,如果结束位置小于起始位置,则返回空数组。

splice() //最强大数组算法--多种用法,主要用途是向数组的中部插入项

删除——可以删除任意数量的项,只需要指定2个参数:要删除的第一项的位置和要删除项的项数。例如,splice(0,2)会删除数组中的前两项。
插入——可以向指定位置插入任意数量的项,只需要提供3个参数:起始位置、0(要删除的项数)和要插入的项。如果要插入多个项,可以再传入第四、第五,一直任意多个项。
例如,splice(2,0”red”,”green”)会从位置2开始插入字符串“red”和”green”。
替换——可以指向指定位置插入任意数量的项,且同时删除任意数量的项,只需要指定3个指定参数:起始位置、要删除的项数和要插入的任意数量项。
插入的像是不必与删除的项数相等。例如,splice(2,1,”red”,”green”)会删除当前数组位置2的项,然后再从位置2开始插入字符串“red”和“green”。
splice()方法始终都会返回一个数组,该数组中包含从元素数组中删除的项(如果没有删除任何项,则返回一个空数组)。

(9)位置方法indexOf(),和lastIndexOf()类似于字符串,不过在比较第一个参数与数组中的每一个项是,会使用全等操作符,即严格相等。

(10)迭代方法--every(),filter(),forEach(),map(),some()

每个方法都接受两个参数:要在每一项上运行的函数fn和(可选的)运行该函数的作用域对象——影响 `this` 的值。传入这些方法中的函数(fn)会接收3个参数:item 、index 、array; 如:array.forEach(function(item,index,array){  //do your staff here; },this)

根据使用方法的不同,这个函数执行后的返回值,可能会/不会影响方法中的返回值。

5个迭代方法作用及返回值概览如下:

方法名

方法作用 

返回值

every()

针对数组中每一项元素运行指定函数

Boolean:若每一项都返回true,返回true;

filter()

针对数组中每一项元素运行指定函数

Array:   返回函数运行返回true的元素组成的新数组

forEach()

针对数组中每一项元素运行指定函数

null:  无返回值

map()

针对数组中每一项元素运行指定函数 

Array:  返回函数运行后,得到新元素组成的新数组

some()

针对数组中每一项元素运行指定函数

Boolean: 若有任意一项执行函数后返回true, 则返回true

every() 、some() 方法适合用于对数组元素进行条件判断;

filter()  、map() 方法适合用于对数组进行条件筛选/再处理;

forEach() 方法对不对数组本身做操作,仅仅对数组元素的二次应用;

例子:先来假设一个场景,你拿到了公司的本月工资清单,假设你的工资为9000;公司员工工资组成的数组为salaries=[8500,12000,9900,9000],

a. 想知道 你的工资是不是最低的;

b.想知道 有没有人和你工资一样多;

c.想知道 是不是所有人待遇都一样;

d.想 把大家的工资都换成K为单位的数据

var a,b,c;

var your=9000;

var salaries=[8500,12000,9900,9000];

 a=salaries.some(function(item,index,array){

   return  item<9000

});

console.log(a);//true;恭喜你,还有人比你工资更低

b=salaries.filter(function(item,index,array){

   return item== your;

})

console.log(b);//[9000] 呵呵,有人跟你待遇一样

c=salaries.every(function(item,index,array){

   return item==your;

});

console.log(c);//false .不是所有人都和你一样待遇哦

d=salaries.map(function(item,index,array){

   return item/1000

});

console.log(d);//[8.5,12,9.9,9]

(11)归并方法,reduce()和reduceRight()

//这2个方法可以详情请见  http://blog.csdn.net/simoniter/article/details/52013660

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值