js中的数组是可以存放任意数据类型值的集合,数组的元素可以是任意数据 类型,数组的⻓度可以动态调整。
1.数组创建
使⽤数组字⾯量
由⼀对包括元素的⽅括号"[]"表示,元素之间以逗号","隔开
var names = ["terry","larry","tom"]
var name = "name"
// 可以接收任何类型的数据当做数组的元素
var arr = [12,name,true,"larry",{},function(){},[],null];
// 通过数组下标获取对应的数据
console.log(arr,arr[2]);
// 获取数组的⻓度
console.log(arr.length);//arr.length
使⽤Array构造函数
var names = new Array(); // 等价于 var names = [];
// 如果⼀个参数,并且是number类型的整数,则代表的是数组的⻓度。如果是
number类型的⼩数,则报错。如果是其他类型,则当做数组元素放进去。
//var arr = new Array(length); 创建⼀个⻓度为length的数组
var names = new Array(3);
// 创建⼀个包含3个元素的数组 var arr =
[undefined,undefined,undefined];
//var ages = new Array(2.4);//Error: Invalid array length
var ages = new Array("2.4");
var names = new Array('terry') //创建⼀个包含1个元素的数组,该元素
的值为'terry'
// 两个参数或者多个参数,当做数组元素放进去
var names = new Array('terry','robin')//创建⼀个数组,数组中的元素
使⽤实参初始化
2.数组访问
数组变量名[索引]
//如果索引⼩于数组的⻓度,返回对应项的值
var arr = ["terry","larry","boss"];
arr[0] ; //访问数组中第⼀个元素,返回值为terry
//如果索引⼤于等于数组的⻓度,返回undefined
var arr = ["terry","larry","boss"];
arr[10]
//undefined
//如果给索引⼤于等于数组的⻓度的位置设置了值,数组⾃动增加到该索引值加1的
⻓度
var arr = ["terry","larry","boss"];
arr[3] ="jacky"; //添加元素,数组⻓度变为4
//注意!数组最多可以包含4 294 967 295个项
通过索引访问数组,数组的索引从0开始,数组的索引超过数组⻓度会访问 到undefined值⽽不会报错。数组的⻓度通过length属性获取
a) [index] 直接访问,索引可以超过索引范围,只不过访问的值为undefined
b) length-1=Max(index)
c) length+N 或 length-N 开辟新的内存空间 或 数组元素的删除
var arr = ["terry","larry","tom"]
// a.[index]
console.log(arr[0])
//"terry"
// b.length-1=Max(index)
arr[arr.length - 1]
// length+N length-N 并不是直接使⽤length加或减 ⽽是设置新的⻓度
// 开辟新空间
arr.length = 4
//数组元素删除
arr.length = 2
// 数组的遍历:
// 普通的for循环、增强版for循环、while循环、do-while循环
var arr = [1,2,3];
for(var i=0;i<arr.length;i++){
var item = arr[i];
}
for(var index in arr){
var val = arr[index]
}
3.数组API
1.数组序列化
toString() 在默认情况下都会以逗号分隔字符串的形式返回数组项 join() 使⽤指定的字符串⽤来分隔数组字符串
var arr = [1,5,2,8,10,{a:1}];
console.log(arr);//[ 1, 5, 2, 8, 10, { a: 1 } ]
console.log(arr.toString());//”1,5,2,8,10,[object Object]”
console.log(arr.join(""));//”152810[object Object]”
console.log(arr.join("-"));//”1-5-2-8-10-[object Object]”
// 数组也可以使⽤序列化⼯具进⾏转换,并且,数组也存在深拷⻉浅拷⻉的现象,
也可以使⽤序列化⼯具解决此问题
var result = JSON.stringify(arr);
console.log(result);//”[1,5,2,8,10,{"a":1}]”
console.log(JSON.parse(result));//[ 1, 5, 2, 8, 10, { a: 1 } ]
2.构造函数的⽅法
Array.isArray() ⽤来判断某个变量是否是⼀个数组对象
Array.from() 从类数组对象或者可迭代对象中创建⼀个新的数组实例。
var myArr = Array.from("BRIUP");
console.log(myArr);
//输出结果为["B","R","I","U","P"]
Array.of() 根据⼀组参数来创建新的数组实例,⽀持任意的参数数量和类型。
Array.of(7);
// [7]
Array.of(1, 2, 3); // [1, 2, 3]
3.栈与队列⽅法
Array.prototype.push()
push() ⽅法可向数组的末尾添加⼀个或多个元素,并返回新的⻓度。
注意: 新元素将添加在数组的末尾, 此⽅法改变数组的⻓度。
语法: array.push(item1, item2, ..., itemX)
参数值
参数 | 描述 |
item1 , item2 , ..., itemX | 必需。要添加到数组的元素。 |
返回值
返回值类型 | 描述 |
Number | 新数组长度 |
数组中添加新元素:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
// push() 添加元素到末尾 参数是要添加的元素 返回值是修改之后数组的
⻓度【改变原数组】
fruits.push("Kiwi")
console.log(fruits);
//fruits 结果输出:Banana,Orange,Apple,Mango,Kiwi
Array.prototype.pop()
pop() ⽅法⽤于删除数组的最后⼀个元素并返回删除的元素。
注意:此⽅法改变数组的⻓度!
返回值
类型 | 描述 |
所有类型 | 返回删除的元素 |
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.pop();
console.log(fruits);
//fruits 结果输出:Banana,Orange,Apple
Array.prototype.shift()
shift() ⽅法⽤于把数组的第⼀个元素从其中删除,并返回第⼀个元素的 值。
注意: 此⽅法改变数组的⻓度!
语法 array.shift()
返回值
类型 | 描述 |
所有类型 | 删除的元素 |
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.shift()
console.log(fruits);
//fruits结果输出:Orange,Apple,Mango
Array.prototype.unshift()
unshift() ⽅法可向数组的开头添加⼀个或更多元素,并返回新的⻓度。
注意: 该⽅法将改变数组的数⽬。
语法 array.unshift(item1,item2, ..., itemX)
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.unshift("Lemon","Pineapple");
console.log(fruits)
//fruits 将输出:Lemon,Pineapple,Banana,Orange,Apple,Mango
4.排序⽅法
Array.prototype.reverse()
reverse() ⽅法⽤于颠倒数组中元素的顺序。
语法 array.reverse()
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.reverse();
console.log(fruits)
//fruits结果输出:Mango,Apple,Orange,Banana
Array.prototype.sort()
sort() ⽅法⽤于对数组的元素进⾏排序。如果调⽤该⽅法时没有使⽤参 数,将按字⺟顺序(Ascall编码)对数组中的元素进⾏排序,说得更精 确点,是按照字符编码的顺序进⾏排序。要实现这⼀点,⾸先应把数组 的元素都转换成字符串(如有必要),以便进⾏⽐较。如果要想进⾏升 序或是降序排序的话,要提供⽐较函数。
排序顺序可以是字⺟或数字,并按升序或降序。
默认排序顺序为按字⺟升序。
语法 array.sort(sortfunction)
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();
console.log(fruits)
//fruits 输出结果:Apple,Banana,Mango,Orange
注意:当数字是按字⺟顺序排列时"40"将排在"5"前⾯。 使⽤数字排序,你必须通过⼀个函数作为参数来调⽤。 函数指定数字是按照升序还是降序排列。
当 a>b 时,
4>2 a - b > 0 ,排序结果 ===> b,a (升序) b - a < 0 ,排序结果 ===> a,b (降序)
当 b>a 时,
a - b < 0 ,排序结果 ===> a,b (升序) b - a > 0 ,排序结果 ===> b,a (降序)
当 a=b 时,
a - b = b - a =0 , 排序结果 ===> 保持不变
(a>b升序,a<b降序)
升序
var points = [40,100,1,5,25,10];
points.sort(function(a,b){
return a-b
});
//points输出结果:1,5,10,25,40,100
降序
var points = [40,100,1,5,25,10];
points.sort(function(a,b){
return b-a
});
//fruits输出结果:100,40,25,10,5,1
5.操作⽅法
Array.prototype.concat()
concat() ⽅法⽤于连接两个或多个数组。
该⽅法不会改变现有的数组,⽽仅仅会返回被连接数组的⼀个副本。
语法 array1.concat(array2,array3,...,arrayX)
var hege = ["Cecilie", "Lone"];
var stale = ["Emil", "Tobias", "Linus"];
var kai = ["Robin"];
var children = hege.concat(stale,kai);
//children 输出结果:Cecilie,Lone,Emil,Tobias,Linus,Robin
Array.prototype.slice()
slice() ⽅法可从已有的数组中返回选定的元素。
slice()⽅法可提取字符串的某个部分,并以新的字符串返回被提取的部 分。
语法 array.slice(start, end) (包括start不包括end,如果该参数为负数, 则它表 示在原数组中的倒数第⼏个元素结束抽取。)
var fruits = ["Banana", "Orange", "Lemon", "Apple",
"Mango"];
var citrus = fruits.slice(1,3);
//citrus 结果输出:Orange,Lemon
Array.prototype.splice()
splice() ⽅法⽤于添加或删除数组中的元素。
注意:这种⽅法会改变原始数组。
语法 array.splice(index,howmany,item1,.....,itemX)
参数 | 描述 |
index | 从何处开始添加或删除,必须 |
howmany | 删除几个元素,可选 |
item1,.....,itemX | 要添加的新元素,可选 |
返回值 如果删除元素返回删除的元素的数组
添加新元素:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
//从数组索引位置 2 开始,不删除元素,添加两个新的元素"Lemon","Kiwi"
fruits.splice(2,0,"Lemon","Kiwi");
//fruits输出结果:Banana,Orange,Lemon,Kiwi,Apple,Mango
移除数组的第三个元素,并在数组第三个位置添加新元素:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.splice(2,1,"Lemon","Kiwi");
//fruits输出结果:Banana,Orange,Lemon,Kiwi,Mango
从第三个位置开始删除数组后的两个元素:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.splice(2,2);
//fruits输出结果:Banana,Orange
6.位置⽅法
7.迭代⽅法
我们下篇再聊