语法
数组构成:数组由一个或多个数组元素组成的,各元素之间使用逗号“,”分割。
数组元素:每个数组元素由“索引下标”和“值”构成。
索引下标:简称下标,以数字表示,默认从 0 开始依次递增,用于识别元素。
值:元素的内容,可以是任意类型的数据,如数值型、字符型、数组、对象等。
创建数组
两种方式创建数组:直接使用“[]”的方式和实例化 Array 对象的方式。
方法一
使用数组直接量是创建数组最简单、最直观的方法,在方括号中将数组元素用逗号隔开即可。
例如:
var empty = []; // 没有元素的空数组
var num = [1, 3, 5, 7, 9]; // 有 5 个数值的数组
var mixin = ['Bob', 20, true]; // 3 种不同元素的数组
复制代码
方法二
调用构造函数 Array()创建数组
// 元素值类型为字符串
var area = new Array('Beijing', 'Shanghai', 'Shenzhen');
// 元素值类型为数值型
var score = new Array(56, 68, 98, 44);
// 元素值类型为混合型
var mix = new Array(123, 'abc', null, true, undefined);
// 空数组
var arr1 = new Array(); 或 var arr2 = new Array; //等同于数组直接量 [ ]
// 指定长度的数组
var len = new Array(5); //这种方式用来创建指定长度的数组。当预先知道所需元素个数时,这种方式可以用来预先分配一个数组空间。注意,数组中没有存储值,不能认为它是包含 5个值为 undefined 元素的数组
//含有3个空储存位置
var emptyPlace1 = ['abc', , , ,'123'];
//会报语法错误
var emptyPlace2 = new Array(56, 68, , , ,98);
复制代码
在创建数组时,最后一个元素后的逗号可以省略,也可以存在。
数组长度
每个数组都有一个 length 属性,length 属性值代表数组中元素的个数。
var empty = []; // 数组没有元素
var letters = ['a', 'b', 'c', 'd']; // 数组有 4 个元素
var arr = ['a', , , , 'b', 'c'];
console.log(empty.length); // 0
console.log(letters.length); // 4
console.log(arr.length); // 6
复制代码
修改数组长度
数组的 length 属性不仅可以用于获取数组长度,还可以修改数组长度。利用 length 属性指定数组长度时,有三种情况
大于数组长度
var arr1 = [];
arr1.length = 5;
console.log(arr1); // 输出结果:(5) [empty × 5]
var arr2 = [1, 2, 3];
arr2.length = 4;
console.log(arr2); // 输出结果:(4) [1, 2, 3, empty]
复制代码
小于数组长度
var arr4 = ['hehe', 'xixi', 'gugu', 'jiujiu'];
arr4.length = 3;
console.log(arr4); // 输出结果:(3) ["hehe", "xixi", "gugu"]
复制代码
等于数组长度
访问和修改数组元素
数组创建完成后,我们可以 [ ] 操作符访问数组中的元素,数组的引用位于方括号左边。
方括号中是一个返回非负整数的任意表达式。使用该语法即可以访问数组中的元素,又可以修改数组中的元素。
var letters = ['a', 'b', 'c', 'd'];
console.log(letters[0]); // 访问索引为 0 的元素 'a'
console.log(letters[4 - 2]); // 访问索引为 2 的元素 'c'
letters[1] = 1; // 修改索引为 1 的元素 ['a', 1, 'c', 'd']
letters[1 + 2] = 3; // 修改索引为 3 的元素 ['a', 1, 'c', 3]
复制代码
根据下标添加和修改
var arr = ['Asa','Taylor'];
arr[2] = 'Tom';
arr[3] = 'Jack';
console.log(arr);
复制代码
delete 关键字只能删除数组中指定下标的元素值,删除后该元素依然会占用一个空的存储位置。
var stu = ['Tom', 'Jimmy', 'Lucy'];
console.log(stu); // 输出结果:(3) ["Tom", "Jimmy", "Lucy"]
delete stu[1]; // 删除数组中第2个元素
console.log(stu); // 输出结果:(3) ["Tom", empty, "Lucy"]
复制代码
遍历数组
一维数组可以利用 for、forEach、for…of 进行遍历,二维数组只需在遍历数组后,再次遍历数组的元素即可。
for 循环遍历
var heroes = ['刘邦', '张良', '韩信', '萧何','刘备'];
var len = heroes.length;
for (var i = 0; i < len; i++) {
console.log(heroes[i])
}
复制代码
forEach 遍历
注意:forEach 不支持 continue 和 break,即,forEach 里面不能使用 continue 和 break
var arr = [1,2,3,4,[5,6,7],8];
arr.forEach(function(ele,index,arr){
if(Array.isArray(ele)){ // 判断当前元素是否是数组,
//若是数组,再次进入遍历数组
ele.forEach(function(ele1,index,arr){
console.log(ele1);
})
} else {
console.log(ele);
}
})
复制代码
for...of 遍历
var arr = [1,2,3,4,[5,6,7],8];
for(item of arr) {
if (Array.isArray(item)){ // 判断当前元素是否是个数组,
// 若是数组,则再次进入遍历数组
for (items of item){
console.log(items);
}
} else {
console.log(item);
}
}
复制代码
二维数组
// 使用Array对象创建数组
var info = new Array(new Array('Tom', 13, 155), new Array('Lucy', 11, 152));
var arr = new Array(new Array, new Array);// 空二维数组
// 使用“[]”创建数组
var num = [[1, 3], [2, 4]];
var empty = [[], []]; // 空二维数组
复制代码
数组内元素排序方法
冒泡排序
算法步骤
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
代码如下:
var arr = [10, 2, 5, 27, 98, 31];
console.log('待排序数组:' + arr);
for (var i = 0; i < arr.length-1; i++) { // 控制需要比较的轮数
for (var j = 0; j < arr.length - i-1; j++) { // 控制参与比较的元素
if (arr[j] > arr[j + 1]) { // 比较相邻的两个元素
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];//解构交换
}
}
}
console.log('排序后的数组:' + arr);
复制代码
两个变量的交换
//1、两个变量值的交换---》面试题
var num1=10;
var num2=100
var temp=null; //定义一个第三方的变量
temp=num1 //temp=10
num1=num2 //num1=100
num2=temp //num2=10
//2、不使用第三方变量
num1=num1+num2; //110
num2=num1-num2; //10
num1=num1-num2; //100
//排序函数的原理?
//数组的每两项进行比较,a和b
//1、a和b比较a小于b,a和b的位置不变
//2、a和b比较a大于b,a和b的位置交换一下
//3、如果a和b相等,位置不变
复制代码
选择排序
算法步骤
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。
再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
重复第二步,直到所有元素均排序完毕。
代码如下:
//选择排序
var arr= [10, 2, 5, 27, 98, 31];
var len = arr.length;
var minIndex, temp;
for (var i = 0; i < len - 1; i++) {
minIndex = i;
for (var j = i + 1; j < len; j++) {
if (arr[j] < arr[minIndex]) { // 寻找最小的数
minIndex = j; // 将最小数的索引保存
}
}
temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
console.log('排序后的数组:'+arr);
复制代码
评论