数组
1. 声明定义数组
1.1 构造函数
var arr1 = new Array();
// 可以直接传入参数
var arr2 = new Array(10, 20, 30);
console.log(arr2);
// 当只有一个属性时,代表的是数组的长度
var arr3 = new Array(10);
console.log(arr3);
console.log(arr3.length);
注意:当传入的是一个数时,这个数代表的是这个数组的长度
结果:
1.2 字面量方法
// 字面量方法
var arr0 = [];
// 可以定义的时候传入数据
var arr1 = [1, 2, 3];
console.log(arr1);
结果:
2. 数组的属性
2.1 数组的长度
使用arr.length来获取数组的长度
var arr1 = [1, 2, 3];
console.log(arr1.length);
结果:
2.2 数组的下标
数组下标的范围:[0~ arr.length)或者[0~arr.length-1]
注意:是从0开始的,包含0
2.3 访问数组
方法: arr[下标]
var arr1 = [1, 2, 3];
console.log(arr1[0]);
结果:
3. 数组的方法
3.1 添加元素
push() 尾部
是在数组的尾部添加的元素,会改变原来的数组,得到新的数组
var arr = [1, 2, 3, 4, 5];
console.log("原数组:" + arr);
// push()方法
arr.push(10);
console.log("新数组:" + arr);
结果:
unshift() 头部
是在数组的头部添加的元素,会改变原来的数组,得到新的数组
var arr = [1, 2, 3, 4, 5];
console.log("原数组:" + arr);
// unshift()方法
arr.unshift(10);
console.log("新数组:" + arr);
结果:
3.2 删除元素
pop() 尾部
是在数组的尾部进行删除,会改变原来的数组,返回一个新的数组
var arr = [1, 2, 3, 4, 5];
console.log("原数组:" + arr);
// pop()方法
arr.pop();
console.log("新数组:" + arr);
结果:
shift() 头部
是在数组的头部进行删除,会改变原来的数组,返回一个新的数组
var arr = [1, 2, 3, 4, 5];
console.log("原数组:" + arr);
// shift()方法
arr.shift();
console.log("新数组:" + arr);
结果:
3.3 数组的组合
concat()
将两个数组中的元素合并为一个新数组,合并完成后,不会修改原数组。
var arr = [1, 2, 3, 4, 5];
var arr1 = [10, 11];
console.log("原数组:" + arr);
// concat()方法
var newarr = arr.concat(arr1);
console.log("新数组:" + newarr);
var newarr = arr.concat(arr1);
结果:
var newarr = arr1.concat(arr);
结果:
注意:newarr=arr1.concat(arr2); 结果是由arr1与arr2组成的 arr1在前
newarr=arr2.concat(arr1); 结果是由arr2与arr1组成的arr2在前
3.3 获取指定元素的区域
slice()
获取数组中指定区域的元素,不会修改原来的元素
范围:[start,end)
var arr = [1, 2, 3, 4, 5];
var new1 = arr.slice(0, 3);// 包含下边0但不包含下标3的元素
console.log(new1);
结果:
3.4 删除并添加新元素
splice(重点)
删除并添加新元素,会修改原来的元素
arr.splice(start,length,数据1,数据2...)
// start : 开始的位置
// length:从start开始,删除的长度
//数据1,数据2 将它们添加到start位置上。
新增
var arr= [10,20,30];
arr.splice(1,0,40);
//将40添加到下标为1的位置上, 0:不删除元素。
结果:
删除
var arr = [10, 20, 30];
console.log("原数组:" + arr);
var new1 = arr.splice(1, 2);//从下标为1的地方开始,删除2个元素。 只有两个参数说明不添加新元素。
console.log("截取后的原数组:" + arr);
console.log("截取后的新数组:" + new1);
结果:
修改
var arr = [10, 20, 30];
console.log("原数组:" + arr);
arr.splice(1, 1, 40);//从下标为1的地方开始,删除1个元素。 再将40放在下标为1的位置上。
console.log("修改后的原数组:" + arr);
结果:
3.5 数组拼接字符串
join()
将数组中的元素,用传入的分隔符(字符串)拼接成一个新的字符串。
var arr = [10, 20, 30];
var str = arr.join("|");
console.log(str);
结果:
3.6 数组的反转
reverse()
反转数组,会影响原数组。
var arr = [10,20,30];
arr.reverse();
//arr 的值为:[30,20,10];
3.7 数组的排序
sort()
对数组进行排序,相当于遍历数组中的每一个元素,让当前元素与后面元素进行比较。比较的规则默认是 谁大谁在后面。
var arr = [1,2,30,40,18,20];
arr.sort();
console.log(arr);
结果:
注意1:先比较数值的第一位,谁大谁排在后面,如果相等,就比较数值的第二位,谁大谁排在后面
上面例子:比较第一位:因为2比18中的第一位1大所以排在后面
注意2:排序是按照Unicode编码排序的,不是按照数字的大小。
自定义规则
传入一个函数。 函数定义两个参数,第一个参数表示当前元素,第二个参数表示下一个元素。相当于,让数组中每一个元素都执行一遍该函数。执行时,该元素会变成第一个参数,下一个元素会传入第二个参数。
这个函数返回值如果大于0,则认为第一个数比较大,如果小于0,则认为第二个数比较大。会将大的数放在后面。
var arr = [12,3,2];
arr.sort(function(a,b){
return a-b;//从小到大排序
});
//结果:[2,3,12]
var arr = [12,3,2];
arr.sort(function(a,b){
//将 a-b 修改为 b-a
return b-a;//从大到小排序
});
//结果:[12,3,2]
3.8 过滤数组
filter()
过滤数组中符合条件的元素。需要传入一个函数。每一个元素都会执行一次该函数。 该函数有三个参数
arr.filter(function(item,index,arr){
return 条件表达式;
})
参数说明:
第一个:item 表示执行该函数的元素。
第二个:index 表示该元素在数组中的下标
第三个:arr 表示数组本身。
函数return的值如果是false,则表示不满足条件。return的值如果是true,则表示满足条件,会将当前元素放在一个新数组中。遍历完成后,最终返回一个新数组,该数组中包含所有满足条件的元素。
//过滤大于35的元素,返回到res数组中。
var arr = [10, 20, 30, 40, 50];
var res = arr.filter(function(item,index,arr){
return item>35;
});
4. 数组的遍历
4.1 for循环
for(var i = 0;i<arr.length;i++){
console.log(arr[i])
}
4.2 for in 循环
for(var i in arr){
console.log(arr[i])
}
4.3 forEach循环
arr.forEach(function(item,index){
console.log(item)
//console.log(arr[index])
})
var arr = [1, 2, 3];
arr.forEach(function(item, index) {
console.log("arr:" + arr);
console.log("index:" + index);
});
结果:
5. 二维数组
数组中嵌套数据
var arr = [[1,2],[3,4]]
//注意 1,2,3,4并不是arr的元素 arr的元素为[1,2] [3,4]
6. 冒泡排序
var arr = [8,6,4,1,5,2,9]
//定义比较的轮次
for (var i = 0; i < arr.length - 1; i++) {
//每一轮让所有元素逐一比较。
for (var j = 0; j < arr.length - 1 - i; j++) {
//相邻元素进行比较,如果左边的大,则交换两个值的位置。
if (arr[j] > arr[j + 1]) {
var tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}