js数组

一、定义

  数组是一组连续的变量组成的集合--统一起一个名字 批量管理多个数据(js的存储都是数组)

二、创建  

 1 //创建的四种方式
 2 //1 创建一个空数组对象
 3 var arr1=[];
 4 
 5 //2 创建数组的同时,维数指定初始元素
 6 var arr2=[1,2,3,4,5];
 7 
 8 //3 用new关键字创建一个数组类型对象,并返回新对象的地址
 9 var arr3=new Array();
10 
11 //4 创建n个元素的数组空数组;创建带初始元素的数组
12 var arr4=new Array(4);//创建四个元素的空数组
13 var arr5=new Array(1,2,3,4,5);
14 
15 /*
16     js数组下标越界不会出错
17     为不存在的位置赋值:不会出错,会自动创建指定下标的新元素
18     从不存在的位置取值:不会报错,也不会增加新元素,而是返回undefined
19     所有没有赋值的变量的默认值为(自动赋值)undefined;
20     主动释放一个变量引用的对象使用null;
21     当使用完一个较大的对象时,主动释放对象是好的习惯;
22 */

三、数组的复制与取值

1 //数组赋值 数组变量[i]=新值;
2 arr2[2]=99;
3 
4 //数组取值 数组变量[i];
5 var i=arr2[0];

四、length属性

 1 /*获取数组中的元素个数(不等于实际的元素个数)
 2  示例:
 3     arr[arr.length-1];获得任意长度数组中的最后一个元素
 4     arr[arr.length]=Value; 向数组末尾追加一个新元素
 5     改小length的值,可以删除末尾元素
 6 */
 7 var att=[1,2,3,4,5];
 8 console.log(att.length);//5
 9 att[100]=100;
10 console.log(att.length);//101
11 console.log(att);//[1, 2, 3, 4, 5, 100: 100]

length属性大多用于索引数组的遍历

五、关联数组

  定义:可以自定义下标的数组(索引数组:自动生成下标的数组都是索引数组)

 1 /*示例*/
 2 var fbb=[];
 3 fbb["sname"]="范冰冰";
 4 fbb["shx"]=91;
 5 fbb["yuw"]=65;
 6 fbb["eng"]=95;
 7 console.log(fbb);//[sname: "范冰冰", shx: 91, yuw: 65, eng: 95]
 8 /*
 9 关联数组中的length属性失效
10 关联(hash)数组:下标不能重复;优点:利用Hash算法,精确定位某个下标的位置,不用遍历
11 索引数组:缺点:小标自动分配无意义,想要内容查找元素,只能从头开始遍历
12 */
13 
14 /*关联数组遍历*/
15 for(var key in fbb){
16         console.log(key+" : "+fbb[key]);
17     }//sname : 范冰冰  shx : 91  yuw : 65  eng : 95

六、数组API

  1.数组输出toString(2种):

 1 /*var str=arr.toString();-->输出数组中的内容,每个元素用逗号分隔,自动调用
 2    var str=arr.join(“”);-->输出数组中的内容,自定义元素间连接符
 3 */
 4 var arr=[1,2,3,4,5];
 5 console.log(arr);//[1, 2, 3, 4, 5] 默认toString()方法
 6 console.log(arr.join("-"));//1-2-3-4-5 自定义连接符
 7 
 8 /*join的两种固定使用方式
 9 1.将字符组成单词:arr.join("");
10 2.将单词组成句子:arr.join(" ");
11 */
12 var arrChar=["H","e","l","l","o"];
13 console.log(arrChar.join(""));//Hello
14 var arrWord=["My","name","is","Medeor","."];
15 console.log(arrWord.join(" "));//My name is Medeor .

  2.拼接concat和截取slice

1 /*concat示例 ar newArr.concat(另一个数组,值1,值2,...);*/
2 var arr=[1,2,3,4,5];
3 var newArr=arr.concat([6,7,8,9,0]);
4 console.log(newArr);//[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
5 
6 /*slice var subArr=arr.slice(starti,endi+1);//含头不含尾
7 (API无法直接修改原对象,而返回新对象)*/
8 var subArr=newArr.slice(3,7);
9 console.log(subArr);//[4, 5, 6, 7]

  3.splice  删除、插入、替换(直接修改原对象)  

 1 /*1.删除:[var deleted=]srr.splice(strti,删除个数);*/
 2 var arr=[1,2,3,4,5,6,7,8,9,0];
 3 arr.splice(2,3);//从下表为2的元素开始删除3个元素
 4 console.log(arr);//[1, 2, 6, 7, 8, 9, 0]
 5 
 6 /*2.插入:arr.splice(starti,0,新值1,...);*/
 7 arr.splice(2,0,5,4,3);//从下表为2的元素开始删除0个元素 插入5 4 3
 8 console.log(arr);//[1, 2, 5, 4, 3, 6, 7, 8, 9, 0]
 9 
10 /*3.替换:arr.splice(starti,删除个数,新值1,...);*/
11 arr.splice(2,3,"a","b","c");//从下表为2的元素开始删除3个元素 插入a b c
12 console.log(arr);//[1, 2, "a", "b", "c", 6, 7, 8, 9, 0]

  4.arr.reverse();颠倒数组中所有元素(直接修改原对象)

  5.sort() 数组排序

    无参数:如果调用该方法时没有使用参数,(对数组元素进行toString()转成字符串)按照字符编码的顺序进行排序。 

1 var arr=["b","a","d","z","w","y","i"];    
2 arr.sort();/*无参数*/
3 console.log(arr.join(" "));//a b d i w y z
 1 arr=[1,12,4,7,49,100];
 2 arr.sort();
 3 console.log(arr.join(" "));//1 100 12 4 49 7
 4 /*问题:默认将所有元素转为字符串升序排列,数字也是按照字符编码排序
 5     比较器函数:专门比较任意两值大小的函数
 6     特点(2个):
 7             1.2个参数,分别表示要比较的任意两值
 8             2.无论比较逻辑是什么,都要返回一个数字
 9             颠倒比较器结果的正负,可以改升序为降序排列
10 */
11 // 定义比较器函数 
12 function sortNumber(a,b){return a - b}
13 arr=[1,12,4,7,49,100];
14 arr.sort(sortNumber);
15 console.log(arr.join(" "));//1 4 7 12 49 100

  6.push()和pop() 模拟末尾出入栈操作

    js中没有真正的栈和队列的类型,一切都是用数组对象模拟

    栈:只能从一端进数组,另一端封闭 

    队列:从一端进入数组,从另一端出   

    入栈:arr.push(value1,value2,...);
    出栈:var last=arr.pop();

1 //末尾入栈
2 var arr=[1,2,3,4,5];
3 var lh=arr.push(6,7,8,9);
4 console.log("新数组长度:"+lh+" "+arr);//新数组长度:9 1,2,3,4,5,6,7,8,9
5 
6 //末尾出栈
7 var last=arr.pop();
8 console.log("数组最后一个元素:"+last+"; Length:"+arr.length);// 数组最后一个元素:9; Length:8
9 console.log(arr);// [1, 2, 3, 4, 5, 6, 7, 8]

  7.unshift()和shift() 模拟开头出入栈操作

    入栈:arr.unshift()
    出栈:var first=arr.shift()

1 //开头入栈
2 var arr=[1,2,3,4,5];
3 var lh=arr.unshift(6,7,8,9);
4 console.log(arr+" lh="+lh);//6,7,8,9,1,2,3,4,5 lh=9
5 
6 //开头出栈
7 var first=arr.shift();
8 console.log("first="+first+" "+arr);//first=6 7,8,9,1,2,3,4,5

  8.push()和shift()模拟结尾如队,开头出对的队列

  9.unshift()和pop()模拟开头入队,结尾出对的队列

七、二维数组数组

  二维数组:数组中的元素,又引用了另一个子数组对象

  何时使用二维数组(2种):

    1. 只要保存横行竖列的二维数据
    2. 保存上下级关系的数据时

  创建二维数组(2种):

 1 //1. 先创建空数组,再赋值:
 2 var arr=[];
 3 arr[0]=["石家庄","保定","唐山"];
 4 arr[1]=["德州","济南","烟台"];
 5 
 6 //2. 创建数组时,同时初始化子数组:     
 7 var data=[
 8     [0,2,2,4],
 9     [2,4,4,8],
10     [16,32,16,8],
11     [4,2,128,4]
12 ];

  访问二维数组中的数据:arr[行下标][列下标]

    比如:data中第2行,第3个元素

      data[1][2]

   强调:二维数组中,行下标不能越界!

  遍历二维数组:

1 //固定套路:外层循环遍历行,内存循环遍历列
2 var arr=[[1,2,3,4],[5,6,7,8],[9,0,11,12]];
3     for(var r=0;r<arr.length;r++){
4         for(var c=0;c<arr[r].length;c++){
5              console.log(arr[r][c]);//输出数组每一个元素
6         }
7     }        

Array

原文地址:https://www.cnblogs.com/Medeor/p/4896333.html