您的位置:首页 > Web前端 > JavaScript

JavaScript数组知识点小结

2016-12-10 21:26 459 查看
写在前面的话

数组的概念

特点

数组的创建

访问数组的方式

js中的数组是可以动态的改变

数组的遍历

数组常用的方法
转化方法

栈方法

模拟队列

数组的一些其他方法

得到新数组的方法

数组的排序

数组自带的排序方法

数组的检测

二维数组

写在前面的话

最近有学习一些新东西,但是在学习新东西的同时,对很多基础的知识也是不能忽略的,经常用还好,一旦不怎么常用了,会渐渐生疏,当然,本文的数组是常用的,但是相较于其他强类型的语言来说,JavaScript的数组就太“自由”了,但是注意一点就是万变不离其宗,虽然“自由”很多,但是其本身的语法也会对其有相应的限制(坑多),因此小结了本文,以备后续的查看,复习。当然,文中尚且有不足之处,还请留言提出,以便交流,学习进步。谢谢!

数组的概念

数组是指的数据的有序列表。

同一个数组中, 元素的类型不做任何限制。

特点

数组的长度可以动态改变

同一个数组可以存储不同的数据类型

js变量是没有类型的

数组的创建

数组字面量[数组的元素]

使用构造函数

1、当用构造函数创建数组对象非的时候,如果只传递了一个整数,那么这个整数表示了要创建的数组的长度,其他情况都是表示数组中初始化的元素。

var arr3 =   new Array(5);
console.log(arr3.length);//1


2、使用构造函数创建数组对象的时候,new可以省略。

var arr4 = Array("a","b");
console.log(arr4);


访问数组的方式:

使用数组中元素下标(index)

数组中每个元素都有一个下标

元素从0 – length-1

js中的数组是可以动态的改变。

1、可以给最后一个元素赋值,来增加数组的长度。

2、直接更改length的值,也可以改变数组的长度。

如果更改的length的值小于最初,则会把多余的元素从数组中移除。

稀疏数组

var arr = [10, 20];
arr[10] = 100;
arr[20] = 200;


数组的遍历

1、普通的for

for(var i = 0, len = arr.length; i < len; i++){
arr[i]
}


2、for in 可以遍历数组。 主要是用来遍历对象的属性。

for(var i in arr){ //i一定是代表了索引  arr指的是要遍历的元素
console.log(i + " " + arr[i]);
}


3、es5:forEach 每个数组给添加了一个方法,可以去遍历数组中的元素。

forEach:专门去遍历一个数组

匿名函数称之为回调函数

arr.forEach(function(element, index){  //参数1:元素   参数2:索引
//代码
});


数组常用的方法

转化方法

1、toString()

2、join(连接符字符串) //参数就是

栈方法

栈结构 FILO

push();push的时候,可以一次性的添加多个元素。入栈一个元素,这个元素会成为最后一个元素。方法的返回值:最新的元素个数。

pop();从数组中出栈一个元素。是数组中的最后一个元素,返回值就是出栈的那个元素。

模拟队列

FIFO(first in first out)

shift:删除队首的元素(下标为0的元素)

unshift:向数组的最前面添加元素(可以多个)

数组的一些其他方法

1、元素的倒置:reverse

倒置数组中的元素。更改数组本身。

2、查找元素的索引

如果在数组中找不到,则返回-1;

arr.indexOf(item); //返回从前面查找item第一次出现的下标

arr.lasrIndexOf(item); //从后面开始查找item第一次出现的位置

indexOf(item, fromBack): 从第二个参数的位置开向后始查找 item 第一次出现的位置

lastIndexOf(item, fromForward): 从第二个参数的位置开始向前查找 item 第一次出现的位置

得到新数组的方法

1、数组的连接

arr1.concat(arr2) 把arr2连接到arr1,返回连接后的新数组,注意:不会更改arr1.

2、截取数组

slice(start, end) 不会修改原数组

start:截取的开始位置(包括)

end:结束的位置(不包括),可以省略,省略后表示一直截取到结尾。

start 和 end 是支持 负数的 。 -1 代表最后一个元素。end必须大于start。

3、向数组或从数组中添加或删除元素

splice(index, count); 参数1:开始删除的下标,参数2:删除的个数;返回删除的那些元素。会更改原数组。

插入的时候第二个参数一般设置为0. arr1.splice(1, 0,”指令”, “fengjie”);

替换:用指定的元素去替换 从参数1 开始的 参数2 的arr1.splice(1, 1,”指令”, “fengjie”);//把1的位置删掉,然后再在1的位置添加

数组的排序

1、冒泡

相邻的两个元素进行比较,只要碰到前面的大于后面的就进行交换。

var arr = [1, 10, 3, 20, 2, 4, 0, 5, 56, 88];
for(var j = 0; j < arr.length - 1; j++) { //循环次数表示参与排序的元素的个数
for(var i = 0; i < arr.length - 1 - j; i++) { //减1为了保证参与的排序的元素下标不会超过length -1,减j是了避免比较过的元素再参与比较,提高效率
if(arr[i] < arr[i + 1]) {//降序
var temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
}
console.log(arr);


2、选择

先选择一个元素最为小的或者最大的,然后再与气体元素进行比较。

var arr = [1, 10, 3, 20, 2, 4, 0, 5, 56, 88];
//选择  效率更高
/*for(var i = 0; i < arr.length - 1; i++) {
var minIndex = i;//记录最小的位置的下标
for(var j = i + 1; j < arr.length; j++) {  //选择了i为最小的,从i+1开始比较
if(arr[minIndex] > arr[j]) {
minIndex = j; //先记录位置
}
}
//minIndex 就是最小的那个元素
if(minIndex != i) {  //比较完一轮后就交换数据
var temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
}*/

//选择   效率更低,比较后直接交换
/*for(var i = 0; i < arr.length - 1; i++){
for(var j = i + 1; j < arr.length; j++){
if(arr[i] > arr[j]){
var temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}*/
console.log(arr);


数组自带的排序方法

arr.sort(); 默认排序规则是按照字母表顺序来排。

数组中的元素都会转成string之后,再按照字母表顺序来排。

arr.sort(function) //function 叫比较函数

arr.sort(function(a, b){
/*
返回值必须是整数:
如果返回值 > 0 就认为 a >  b    a在b右边
=== 0        a === b
< 0        a < b     a在b左边
*/
/*    if(a >  b){
return 1;
}else if(a === b){
return 0;
}else{
return -1;
}
//降序就1变-1,-1变1
*/
return a - b;//升序:
//  return b - a;//降序:
});


数组的检测

instanceof:检测某个对象是不是属于某个类型。结果是true或者false。

Array.isArray(arr); 参数就是要检测的那个数组。结果是true或者false。

在js中只有值传递。

1、简单类型的话,传递的就是那个值的一个copy

2、如果是对象类型,传递的是那个对象的地址值的copy

二维数组

js中没有真正的二维数组

一维数组中的元素是一维数组的时候,就是二维数组。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息