一、数组元素的添加和删除
1.1 元素添加
添加元素最简单的方法就是:
//开始是一个空数组
let a = [];
//然后向其中添加元素
a[0] = "zero";
a[1] = "one";
另一种方式就是使用push()方法在数组末尾增加一个或多个元素:
//开始是一个空数组
let a = [];
//在末尾添加一个元素 a = ["zero"]
a.push("zero");
//再添加两个元素.a = ["zero", "one", "two"]
a.push("one","two");
在数组尾部压入一个元素与给数组a[a.length]赋值是一样的。
1.2 元素删除
可以像删除对象属性一样使用delete运算符来删除数组元素:
let a = [1,2,3];
//a在索引1的位置不再有元素
delete a[1];
// false--组索引1并未在数组中定义
1 in a;
// 3--delete操作并不影响数组长度
a.length;
二、数组遍历
2.1 用for循环
//定义数组
let a = [11,22,33,44,55,66];
//使用for循环
for(let i = 0; i < a.length; i++) {
//打印数组元素
console.log(a[i]);
}
上述代码在在嵌套循环或其他性能非常重要的上下文中,可以看到这种基本的数组遍历需要优化,数组的长度应该只查询一次而非每次循环都要查询:
for(let i = 0, len = a.length; i < len ; i++) {
//循环体仍然不变
}
两个字:优雅!
2.2 排除不合法的元素
这些例子假设数组是稠密的,并且所有的元素都是合法数据。否则,使用数组元素之前应该先检测它们。如果想要排除null、undefined和不存在的元素,代码如下:
//跳过null, undefined和不存在的元素
for(let i = 0; i < a.length; i++) {
if (!a[i]) continue;
//循环体
}
//如果只想跳过undefined和不存在的元素,代码如下:
for(let i = 0; i < a.length; i++) {
if (a[i] === undefined) continue;
//循环体
}
//只想跳过不存在的元素而仍然要处理存在的undefined元素,代码如下:
for(let i = 0; i < a.length; i++) {
if (!(i in a)) continue;
//循环体
}
//还可以使用for/in循环处理稀疏数组。循环每次将一个可枚举的
//属性名(包括数组下标)赋值给循环变量。不存在的下标将不会遍历到:
for(let index in a) {
//循环体
}
三、多维数组
JavaScript多维数组实现九九乘法表:
//创建一个多维数组
let table = new Array(10); //表格有10行
for(let i = 0; i < table.length; i++) {
table[i] = new Array(10); //每行有10列
}
//初始化数组
for(let row = 0; row < table.length; row++) {
for(let col = 0; col < table[row].length; col++) {
table[row][col] = row * col;
}
}
//使用多维数组来查询3*4
let product = table[3][4];
四、数组方法
当天学习了很多数组相关的方法,这里只记录个别。
数组方法就是Array.prototype(原型)中定义了一些很有用的操作数组的函数
//1. join() 将数组中所有元素都转化为字符串并连接在一起
let a = [1,2,3];
a.join(); // => "1,2,3"
a.join(","); // => "1 2 3"
a.join(""); // => "123"
let b = new Array(10); //长度为10的数组
b.join("-"); // => '---------' 9个连字号组成的字符串
//2. sort() 将数组中的元素排序并返回排序后的数组
//当不带参数调用sort()时,数组元素以字母表顺序排序
let a = ["bcbc","chch","akak"];
a.sort();
a.join(); // => "akak,baba,chch"
//为了按照其他方式而非字母表顺序进行数组排序,必须给sort()方法
//传递一个比较函数。该函数决定了它的两个参数在排好序的数组中的先后顺序。
let a = [33,55,66,3,444,8888];
a.sort(); //字母表顺序: 3,33,444,55,66,8888
a.sort(function(s,t){ //数值排序: 3,33,55,66,444,8888
return a-b;
});
a.sort(function(a,b) {return b-a}); //数值大小相反的顺序
//3. concat()方法创建并返回一个新数组
//注意:concat()不会递归扁平化数组的数组
let a = [1,2,3];
//返回[1,2,3,4,5]
a.concat(4,5);
//返回[1,2,3,4,5]
a.concat([4,5]);
//返回[1,2,3,4,5,6,7]
a.concat([4,5],[6,7]);
//返回[1,2,3,4,5,[6,7]]
a.concat(4,[5,[6,7]]);
五、数组类型
给定一个未知的对象,判定它是否为数组通常非常有用。
Array.isArray([]); //=> true
Array.isArray({}); //=> false