Js数组总结

Array类型

创建方式

1.Array构造函数

var colors = new Array();
   var colors = Array(3);//创建一个包含3项的数组

2.数组字面量表示法
数组字面量由一对包含数组项的方括号表示,多个数组项之间以逗号隔开。

var colors = ["red", "blue", "green"];

检测数组

经典问题:确定某个对象是不是数组
对于一个网页,或者是一个全局作用域而言,使用instanceof操作符即可:

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

当网页中具有两个以上不同的全局执行环境时,ECMAScript新增了Array.isArray()方法。
这个方法的目的是最终确定某个值到底是不是数组,而不管是在哪个全局执行环境中创建的
用法如下:

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

转换方法

所有的对象都具有 toLocaleString()、toString()、valueOf()方法。
调用toString()方法会返回由数组中每个值的字符串形式拼接而成的一个逗号分隔的字符串。
调用valueOf()返回的还是数组。

栈方法

push()、pop()
push()方法接收任意数量的参数,把他们逐个添加都数组的末尾,并返回修改后数组的长度。
pop()方法从数组末尾移除最后一项,减少数组的length值,然后返回移除的项
示例如下:

var array = ["red","green"];
    array.push("black");
    console.log(array);   // ["red", "green", "black"]
    array.pop();
    console.log(array);   // ["red", "green"]
    array.pop("red");  //pop()只能获取最后一项,即使参数选项不是最后一个
    console.log(array);   //["red"]

队列方法

shift()方法能够移除数组中的第一个项并且返回该项,同时数组长度减1
结合使用shift()和push()方法,可以像队列一样使用数组。

unshift()方法能在数组前端添加人一个项并且返回新数组的长度
所以同时使用unshift()和pop()方法,可以从相反的方向模拟队列,即在数组的前端添加项,从数组的末端移除项。

重排序方法

reverse()和sort()方法
reverse()方法会反转数组项的顺序
示例:

var values = [1,2,3,4,5];
values.reverse();
console.log(values); // 5,4,3,2,1

sort()方法默认按照升序排列数组项——即最小的值位于最前面,最大的值排在最后面。
为了实现排序,sort()方法会调用每个数组项的toString()转型方法,然后比较得到的字符串,以确定如何排序。
即使数组中的每一项都是数值,sort()方法比较的也是字符串。

var values = [0,1,5,10,15];
values.sort();
console.log(values);   //0,1,10,15,5

因为这种排序方式的存在,所以sort()方法可以接收一个比较函数作为参数,以便指出那个值位于那个值的前面。
简单的比较函数:

function compare(value1,value2){
    if(value1 < value2){
        return -1;
}
    if(value1 > value2){
        return 1;
}
        return 0;
}

说明:比较函数接收两个参数,如果第一个参数应该位于第二个参数之前则返回一个负数,如果两个参数相等,则返回0,如果第一个参数应该位于第二个参数之后,则返回一个正数。
这个比较函数适用于大多数数据类型,只要将其作为参数传递给sort()即可
reverse()和sort()方法返回值是经过排序之后的数组。

对于数值类型或者其valueOf()方法会返回数值类型的对象类型,比较函数可以简化为:

function compare(value1,value2){
    return value2 - value1;
}

操作方法

concat()方法“拼接”

可以基于当前数组中的所有项创建一个新数组。
具体来说,这个方法会先创建当前数组一个副本,然后将接收到的参数添加到这个副本的末尾,最后返回新构建的数组。
在没有给concat()方法传递参数的情况下,它只是复制当前数组并且返回副本。
例如:

var colors = ["red","green","blue"];
var colors2 = colors.concat("yellow",["black","brown"]);

console.log(colors);  //red,green,blue
console.log(colors2);   //red,green,yellow,black,brown

从上例可以看出concat拼接数组时会创建一个副本,所以colors中的值是不变的。

slice()方法“截取”

能够基于当前数组中的一个或者多个项创建一个新数组。slice()方法接收一或两个参数,即要返回项的起始和结束位置。

如果有两个参数,该方法返回起始和结束位置之间的项——但不包括结束位置的项
slice方法不会影响原始数组。

var colors = ["red","green","blue","yellow","purple"];
var color2 = colors.slice(1);
var color3 = colors.slice(1,4);
console.log(color2);  //green,blue,yellow,purple
console.log(color3);  //green,blue,yellow

Tips:
- 如果slice()方法的参数中有一个负数,则用数组长度加上该参数确定相应的位置
- 如果结束位置小于起始位置,则返回空数组。

splice()方法
参数说明:(起始位置,要删除的项数,要插入的任意数量的项)
splice()方法始终都会返回一个数组,该数组中包含从原始数组中删除的项(如果没有删除的项,则返回空数组)

位置方法

indexOf()和lastIndexOf()都接收两个参数:要查找的项和表示查找起点位置的索引。
indexOf()方法从数组的开头开始向后查找,lastIndexOf()方法从数组的末尾开始向前查找。
这两个方法都返回要查找的项在数组中的位置,没找到的情况返回-1

迭代方法

  • every(): 如果该函数每一项都返回true,则返回true
  • filter() :返回该函数会返回true的项组成的数组
  • forEach():该方法没有返回值
  • map():返回每次函数调用结果组成的额数组
  • some():如果该函数对任一项返回true,则返回true

    以上方法都不会修改数组中包含的值
    每个方法都接收两个参数:要在每一项上运行的函数和运行该函数的作用域对象 ——影响this的值。
    传入这些方法中的函数接收三个参数:数组项的值,该项在数组中的位置和数组对象本身。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值