《JavaScript高级程序设计》读书笔记之Array类型

Array类型

1.特点
(1)数组的每一项都可以保存任何类型的数据
(2)数组大小可动态调整


2.创建方式
(1)使用Array构造函数

var color = new Array();                        //创建一个空数组
var color2 = new Array(20);                     //创建一个length值为20的数组
var color3 = new Array("red","blue","green");   //创建一个包含3个字符串值的数组
var color4 = new Array(2,3,4,5);                //创建一个包含4个数值的数组

(2)使用数组字面量表示法

var color = [];                                 //创建一个空数组
var color2 = [2,3,4,5];                 
var color3 = ["red","blue","green"];

3.改变length属性会从数组末尾添加或移除项

//移除
var color = ["red","blue","green"];
color.length = 2;
alert(color[2]);    //undefined。因为长度变成2,所以第三项被移除了

//添加
var color = ["red","blue"];
color.length = 6;   //此时color=["red","blue",undefined,undefined,undefined,undefined]
alert(color[5]);    //undefined

4.检测数组
(1)确定某个对象是不是数组

if(color instanceof Array)
{
    //do something...
    //但是如果网页包含多个框架,即存在两个以上不同的全局执行环境时不适用
    //因为instanceof操作符假定单一的全局执行环境
}

换种方法:

if(Array.isArray(color))
{   
    //do something...
    //各浏览器有些版本尚未实现该方法
}

5.方法


(1)栈方法(后进先出)
push()和pop()都是在数组末尾操作
(a)push()
接收任意数量的参数,并把它们逐个添加到数组末尾,并返回修改后的数组长度

var color = ["red","blue"];
var count = color.push("green","yellow");
alert(count);   //4

(b)pop()
数组末尾移除最后一项,减少数组的length值,然后返回被移除的项

var item = color.pop();     //弹出最后一项并赋值给item
alert(item);                //"yellow"
alert(color.length);        //3

(2)队列方法(先进先出)
shift()和unshift()都是在数组前端操作
(a)shift()
数组前端移除第一项并返回该项,同时将数组长度减一

var colors = new Array();
var count = colors.push("red","blue");  //在数组末尾推入两项
alert(count);           //2(修改后的数组长度)

count = colors.push("green");
alert(count);           //3

var item = colors.shift();              //移除数组第一项并赋值给item
alert(item);            //"red"
alert(colors.length);   //2

(b)unshift()
数组前端添加任意个项并返回新数组的长度

var colors = new Array();
var count = colors.unshift("red","blue");   //在数组前端推入两项
alert(count);               //2(修改后的数组长度)

count = colors.unshift("yellow");   //3(修改后的数组长度)
alert(colors[0]);                   //"yellow"

(3)重排序方法
(a)reverse()
反转数组项的顺序

var values = [3,5,8,1,9];
values.reverse();
alert(values);              //9,1,8,5,3

(b)sort()
按升序排列数组项,比较的是字符串

//初级
var value = [0,1,5,10,15];
value.sort();
alert(value);               //0,1,10,15,5

//高级用法
var value = [0,1,5,10,15];
value.sort(compare);        //把compare比较函数传递进去
alert(value);               //0,1,5,10,15

function compare(v1,v2)     //升序
{
    if(v1<v2)
    {
        return -1;          //降序:return 1;
    }
    else if(v1>v2)
    {
        return 1;           //降序:return -1;
    }
    else
    {
        return 0;
    }
}

(4)操作方法
(a)concat()
创建当前数组的一个副本,然后将接收到的参数添加到这个副本的末尾,最后返回新构建的数组(副本)。也就是它并没有改变原数组,所有操作都是在副本上进行的。

var color = ["red","blue"];
var color2 = color.concat("green",["yellow","white"]);

alert(color);   //red,blue
alert(color2);  //red,blue,green,yellow,white

由此例子可见,如果传递给concat()方法的是一个或多个数组,则该方法会将这些数组中的每一项都添加到结果数组中。就是所有参数数组都拆分成单个的项,然后作为结果数组的每一项。
(b)slice()
截取出子数组。接收一或两个参数,即返回项的起始和结束位置

var colors = ["red","blue","green","yellow","white","black"];
//省略第二个参数,意思即截取到数组末尾
var colors2 = colors.slice(1);      //从下标为1的项开始截取到数组末尾,把截取到的所有项作为新数组返回
//注意slice(m,n)意思即截取下标从m到n(但不包括n)的n-m项
var colors3 = colors.slice(1,4);    //从下标为1的项开始截取到下标为4的项,把截取到的所有项作为新数组返回

alert(colors2);     //blue,green,yellow,white,black
alert(colors3);     //blue,green,yellow

如果slice()方法的参数中有一个负数,则用数组长度加上该数来确定相应的位置

在一个包含5项的数组上
slice(-2,-1)
等价于
slice(3,4)

如果结束位置小于起始位置,则返回空数组

(c)splice()
数组的中部插入项,并返回从数组中删除的项组成的数组。形式:splice(起始位置,要删除的项数,要插入的项)

//删除
splice(0,2);                    //删除数组的前两项
//插入
splice(2,0,"red","green");      //从当前数组的位置2开始删除0项并插入字符串"red"和"green"
//替换
splice(2,1,"red","green");      //从当前数组的位置2开始删除1项(即删除下标为2的项),并插入字符串"red"和"green"

var colors = ["red","blue","green"];
var removed = colors.splice(0,1);   //删除第一项
alert(colors);                      //blue,green
alert(removed);                     //red,返回的数组中只包含一项

removed = colors.splice(1,0,"yellow","white");  //从位置1开始插入两项
alert(colors);          //blue,yellow,white,green
alert(removed);         //返回的是一个空数组,因为并没有删除任何项

removed = colors.splice(1,1,"red","black");     //删除位置1的项并插入两项
alert(colors);          //blue,red,black,white,green
alert(removed);         //yellow,返回的数组中只包含一项

(5)位置方法
(a)indexOf()
(b)lastIndexOf()
这两个方法都返回要查找的项在数组中的位置,只不过一个从开头向后找,一个从数组末尾向前找,没找到返回-1

//参数说明:
//第一个参数:要查找的项
//第二个参数:查找的起点位置(可选)
var numbers = [1,2,3,4,5,4,3,2,1];
alert(numbers.indexOf(4));          //3
alert(numbers.lastIndexOf(4));      //5
alert(numbers.indexOf(4,4));        //5,从数组下标为4的位置开始往后找
alert(numbers.lastIndexOf(4,4,));   //3,从数组下标为4的位置开始往前找

(6)迭代方法
(a)every()、some()、filter()、map()、forEach()

var numbers = [1,2,3,4,5,4,3,2,1];

//every(),查询数组中的每一项是否都满足条件,返回布尔值
var everyResult = numbers.every(function(item,index,array)
{
    return (item>2);
});
alert(everyResult); //false

//some(),查询数组中是否有某一项满足条件,返回布尔值
var someResult = numbers.some(function(item,index,array)
{
    return (item>2);
});
alert(someResult);  //true

//filter(),返回符合条件的项,组成数组
var filterResult = numbers.filter(function(item,index,array)
{
    return (item>2);
});
alert(filterResult);    //[3,4,5,4,3]

//map(),对数组的每一项进行特定操作
var mapResult = numbers.map(function(item,index,array)
{
    return item * 2;
});
alert(mapResult);       //[2,4,6,8,10,8,6,4,2]

//forEach(),迭代数组,没有返回值
numbers.forEach(function(item,index,array)
{
    //do something...
});

(7)缩小方法
(a)reduce()
(b)reduceRight()
这两个方法都会迭代数组的所有项,然后构建一个最终返回的,只不过方向相反而已。每一次迭代返回的值都会作为prev参数传给下一项。

var numbers = [1,2,3,4,5];
var sum = numbers.reduce(function(prev,cur,index,array)
{
    return prev+cur;    //第一次执行回调函数,prev是1,cur是2,以此类推
});
alert(sum);     //15

var sum2 = numbers.reduceRight(function(prev,cur,index,array)
{
    return prev+cur;    //第一次执行回调函数,prev是5,cur是4,以此类推
});
alert(sum2);    //15
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值