一、初识数组
数组是值的有序集合。
每个值叫做一个元素,而每个元素在数组中有一个位置,以数字表示(从0开始),称为索引,整个数组用方括号表示。
1.数组:一组数据的集合,数组的每一个数据叫做一个元素
2.数组元素可以是任意类型,同一个数组中的不同元素可能是对象或数组
3.数组的索引是从零开始的
二、数组的创建方式
1、使用数组直接量是创建数组最简单的方法,在方括号中将数组元素用逗号隔开即可。
注:如果省略数组直接量的某个值,省略的元素将被赋予undefined值。
2、直接实例化,通过构造函数new Array()创建数组
1、隐式方式直接创建数组
2、规定数组长度,并给数组元素赋值(数组长度可以动态设置)
3、创建数组并根据索引给数组赋值(数组长度可以动态设置)
三、length 数组长度
数组长度 每个数组都有一个length属性,返回数组的元素数量
1、将数组清空的一个有效方法,就是将length属性设为0。
2、如果人为设置length大于当前元素个数,则数组的成员数量会增加到这个值,新增的位置都是空位。
3、不知道下标时通过arr[arr.length]=”小孙”;直接在数组的最后加元素,当前索引加一
4、在ECMAScript 5中,可以用Object.defineProperty() 让数组的length属性变成只读。
语法:object.defineProperty(object, propertyname, descriptor)
一共有三个参数。
object:必须,要在其上添加或修改属性的对象。
propertyname:必需。 一个包含属性名称的字符串。
descriptor: 属性描述符。 它可以针对数据属性或访问器属性。
四、数组的方法
1、数组末尾删除和添加
- pop()函数删除数组最后一个元素
▪ Pop()会直接修改原数组,而不是创建一个新的数组
▪ 使用pop返回的是删除的元素及元素类型
- Push()数组末尾添加一个或多个元素,并返回修改后的数组长度(数值类型)
▪ Push()也是会直接修改原数组,而不是创建一个新的数组
- 栈的特点:先进后出
- 栈的两个方法:入栈和出栈
- 入栈:数组结尾添加元素 push()
- 出栈:数组结尾删除元素 pop()
2、数组开头位置删除和增加
- Shift() 删除数组开头第一项
- Unshift() 数组开头添加一个或者多个元素,并返回修改后的数组长度
- 队列的特点:先进先出
- 队列的两个方法:入队和出队
- 入队:数组末尾添加一个或者多个元素 push()
- 出队:删除并返回数组的第一个元素 shift()
3、数组任意位置删除,插入,替换及截取
- splice():可以实现删除,插入,替换及截取。直接修改的原数据
- 删除:可删除任意数量的元素,需要两个参数(删除的第一项索引,删除的项数)
- 插入:可以指定位置插入任意个元素,需提供三个参数(起始位置,删除的项(0),插入的元素)
- 替换:可以向指定位置插入任意多个项,需提供3个参数(起始位置,删除项,插入元素)
- 截取:返回一个从原始数据中包含的删除项数组
4、截取指定下标的数组和字符串
- Slice():截取指定下标的数组元素或者字符串。不修改原数据
语法:slice(开始下标,结束下标(不包含));
5、IndexOf()查找指定元素下标,从前往后查找
- 有重复的就返回第一个元素下标
- 元素不存在返回-1
6、LastIndexOf()查找指定元素下标,从后往前查找
- 有重复的就返回第一个元素下标
- 元素不存在返回-1
7、concat() 方法用于连接两个或多个数组
该方法会创建当前数组一个副本,不会改变原有数组,返回一个新数组
8、reverse() 反转数组中的顺序,改变的是原来数组,不会创建新数组
9、数组转字符串
join()将数组的元素转成字符串
10、伪数组转数组
Array.from()将伪数组变成数组,只要有length属性就可以转成数组
(对象没有长度所以转不了,使用这个语法得到的时空数组。)
五、多维数组
JavaScript不支持真正的多维数组,但可以用数组的数组来近似。也可以说,数组里放数组。
六、遍历
我们可以使用for循环、while循环、for..in或者forEach()方法来遍历数组
一维数组遍历:
- ForEach()方法需要一个函数作为参数,此函数是由我们创建的,但是不由我们调用(浏览器调用)我们称之为回调函数。
二维数组遍历
七、数组的排序
1、选择排序
var example=[8,94,15,88,55,76,21,39];
function selectSort(arr){
var len=arr.length;
var minIndex,temp;
console.time('选择排序耗时');
for(i=0;i<len-1;i++){
minIndex=i;
for(j=i+1;j<len;j++){
if(arr[j]<arr[minIndex]){
minIndex=j;
}
}
temp=arr[i];
arr[i]=arr[minIndex];
arr[minIndex]=temp;
}
console.timeEnd('选择排序耗时');
return arr;
}
console.log(selectSort(example));
2、冒泡排序
<script type="text/javascript">
var my_num = [1,3,9,0,40]
function num(arr){
for(var i =0; i< arr.length-1;i++){
for(var j = 0;j < arr.length-1;j++){
if(arr[j]>arr[j+1]){
var tmpe = arr[j];
arr[j] = arr[j+1];
arr[j+1]= tmpe;
}
}
}return arr;
}
document.write(num(my_num));
</script>
总结一下冒泡和选择的区别:
冒泡排序是左右两个数相比较,而选择排序是用后面的数和每一轮的第一个数相比较;
冒泡排序每轮交换的次数比较多,而选择排序每轮只交换一次;
冒泡排序是通过数去找位置,选择排序是给定位置去找数;
当一个数组遇到相同的数时,冒泡排序相对而言是稳定的,而选择排序便不稳定;
在时间效率上,选择排序优于冒泡排序。
3、sort()用于对数组元素升序,会直接改变原数组
会先根据元素第一个字符进行排列
Sort()问题:sort()排序规则是根据Unicode编码表排序的,所以会对字符逐一比较,
升级:sort()函数的参数是一个比较函数
语法:sort(比较函数);
八、数组的过滤
- 数组元素过滤 filter()把数组中的某些元素过滤掉,返回剩下的元素,接收的是一个回调函数
(将元素过滤,满足条件的留下,不满足就过滤掉)
九、数组去重
- 数组元素遍历法去重 利用indexOf()方法
- Set方法去重(ES6提供的新的数据结构)
十、数组的交、并集
数组的并集,交集,差集
十一、类数组对象
在JavaScript中,有些对象被称为“类数组对象”。意思是,它们看上去很像数组,可以使用length属性,但是它们并不是数组,无法使用一些数组的方法。