JavaScript学习之数组总结

1.数组(Array)

  • 数组也是一个对象
  • 与普通对象功能类似,也是用来存储一些值,不同的是普通的对象使用字符串来做属性名,而数组是使用数字来作为索引操作元素。
  • 索引:从0开始的整数
  • 数组的存储性能要比普通对象的好,开发中一般使用数组来存储一些数据。
  • 创建数组对象,var arr = new Array();
  • 向数组中添加元素,语法:数组名[索引]=值。
  • 读取数组中的元素,语法:数组名[索引];如果读取不存在的索引,不会报错而是返回undefined。
  • 获取数组长度,使用length。语法:数组名.length
    对于连续的数组,使用length可以获取到数组的长度,也就是元素的个数。
    对于非连续的数组,使用length会获取到最大索引值加一,所以尽量不要创建非连续的数组。
  • length还能被修改,如果修改的length大于原长度,多出的地方就会空出来,路过修改的length小于原长度,那么多出的元素会被删除。
  • 向数组的最后一个位置添加值。语法:数组名[数组名.length]=值。
  • 数组中可以存储任何数据类型,包括对象函数。

2.数组字面量

使用字面量创建数组。语法:[];
var arr=[];
使用字面量创建数组时,可以同时指定数组元素。
var arr=[1,2,3,4,5,6,7];
使用构造函数创建数组时也可以同时指定数组元素。
var arr =new Array(1,2,3,4);
但是有个不同:创建时只指定一个值var arr =new Array(10);这里代表创建一个数组,数组长度为10。

3.数组常用的几个方法

  • push():该方法可以向数组的末尾添加一个或多个元素,并且返回数组新的长度。
    使用方法:将要添加的元素作为方法的参数传递,就能将这些元素添加到数组的末尾。var result=arr.push(1,2,3,4,"五");result的值就是数组新长度。

  • pop():该方法可以删除数组的最后一个元素,并且返回删除元素的值。
    使用方法:var arr=[1,2,3,4]; var result=arr.pop();result等于4。

  • unshift():该方法向数组的开头添加一个或多个元素,并且放回数组的新长度。
    使用方法:arr.unshift(4,5,6);元素插入后,其他的元素的索引会自动调整。

  • shift():该方法可以删除数组开头的第一个元素,并且返回被删除的元素。
    使用方法:var arr=[1,2,3,4]; var result=arr.shift();result值为1。

  • slice():该方法可以用来提取指定元素;其不会影响原数组,只是将截取到的元素封装到一个新数组中返回
    有两个参数:
    1.开始截取的位置的索引,包含开始索引。
    2.截取结束位置的索引,不包含结束索引。
    结束索引可以省略不写,就是从开始索引后全部截取。
    var result = arr.slice(0,3);arr数组的0到2的元素封装到了result数组中。
    索引可以为负值:传递一个负值就是从后往前计算,-1表示倒数第一,-2表示倒数第二,以此类推。

  • splice():该方法可以用来删除数组中的指定元素,splice()方法会影响到原数组,并会将删除的元素封装到新数组中作为返回值返回,还能传递新元素,新元素自动插入到开始位置索引的前面。
    两个参数:
    第一个参数:开始位置的索引。
    第二个参数:要删除的数量。
    第三个参数及更多参数:要添加的新元素。
    var result=arr.splice(1,0,6,9);表示不删除元素,将6和9添加到索引1前面

  • concat():该方法可以连接两个或多个数组(元素),并将新的数组返回(不会影响原数组
    var result = arr.concat(arr1,arr2,"元素一","元素二");这里把arr,arr2,arr3以及两个元素合并成了一个新数组赋值给了result。

  • join():该方法可以将一个数组转化为一个字符串,其不会对原数组产生影响,而是会返回一个转化后的字符串。
    join()可以指定一个字符串作为参数,作为每个元素连接成字符串时的连接符,参数为空就默认为逗号。

var arr=[1,2,3,4,5,6,7];
var result=arr.join("@@");
console.log(result);

在这里插入图片描述

  • reverse():该方法可以用来反转数组,顺序倒置。其会直接修改原数组。
    使用方法:arr.reverse();

  • sort():该方法可以用来对数组进行排序,默认使用unicode编码进行排序。
    注意:使用sort()时,因为它即使是对纯数字进行排序也是使用Unicode编码进行排序,所以容易出现错误(1=11)。这个时候(数字排序时)我们要自己指定排序规则。
    方法:在sort()中添加一个回调函数,来指定排序规则,回调函数要有两个形参。例如:sort(a,b),浏览器将会分别使用数组中的元素作为实参去调用函数。使用哪个元素不确定,但是在数组中,a一定比b要在前。
    原理:浏览器会根据回调函数的返回值来决定元素的顺序。
    1.返回大于0的值(即认为a大于b),元素交换位置
    2.返回值等于0(即认为a等于b),元素不交换位置
    3.返回值小于0(即认为a小于b),元素不交换位置

var arr=[8,5,1,3,2,4,6,7,9];
arr.sort(function(a,b){
    // 方法一
// if(a>b){
//     return 1;
// }
// else if(a<b)
// {
//     return -1;
// }
// else
// {
//     return 0;
// }

// 方法二
return a-b;//推荐
});
console.log(arr);
要是想变成从大到小排序,按照原理修改即可。

在这里插入图片描述

4.遍历数组

一般是使用for循环(for(var i=0;i<arr.length();i++){}
这里说下内置函数forEach();
forEach()方法需要一个函数(这个函数由我们创建但是不由我们调用,称为回调函数)作为参数。

  • 数组有几个值函数就会执行几次,每次执行时,浏览器都会将遍历到的元素以实参的形式传递进来,我们要定义形参来读取这些内容。
  • 浏览器会在会在回调函数中传递三个参数。
    第一个参数:当前遍历到的元素;
    第二个参数:当前遍历到的索引;
    第三个参数:正在遍历的数组,直接就是数组。
  • 兼容性:forEach方法只被ie8以上浏览器支持,如果要兼容ie8及以下浏览器,还是使用for循环来遍历。
var arr=[1,2,3,4,5,6];
arr.forEach(function(a,b){
console.log("索引值为:"+b+" 值为:"+a);
});

在这里插入图片描述
**注意:使用delete命令delete arr[1]删除数组元素后,会产生空位,length属性不会过滤空位,forEach方法和for…in 结构和Object。keys方法进行遍历时会跳过空位。 **

5.类数组

类数组和数组类似,可以使用length,且其键名也为纯数字,但不能使用数组的forEach()方法等等。

function args(){
    return arguments;
}
var arrayLike=args('a','b');//类数组
// 使用slice使类数组变为数组
var arr=Array.prototype.slice.call(arrayLike);
console.log(arr instanceof Array);//true
//使用call将forEach嫁接到类数组中
function print(value,index){
    console.log(index+':'+value);
}
Array.prototype.forEach.call(arrayLike,print);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值