每天一句: 如果你不是领头羊,那么看到的东西都是一样的。
Array数组类型,这和其他语言中的数组有着很大的区别。虽然数组都是有序列,但在JS中的数组每个元素可以是任何类型,另外数组的大小也是可以调整的。
一、数组的创建
- 使用new关键字创建数组
var box = new Array(); // 创建了一个数组
var box = new Array(10); // 创建一个包含 10 个元素的数组
var box = new Array('张三',18,'男','深圳'); // 创建一个数组并分配好了元素
alert(typeof box); // object
- 以上三种方法,可以省略new关键字
var box = Array();
- 使用字面量方式创建数组
var box = []; //创建一个空的数组
var box = ['李四',18,'男','广州']; //创建包含元素的数组
var box = [1,2,]; // 禁止这么做,IE 会识别 3 个元素
var box = [,,,,,]; // 同样,IE 的会有识别问题
二、数组操作
- 使用索引下标读写数组值(元素下标从0开始!!!)
var box = ['王五',18,'男','广州'];
alert(box[2]); // 获取第三个元素
box[2] = '学生'; // 修改第三个元素
box[4] = '计算机编程'; // 增加一个元素,即第五个元素
- 数组的length属性(数组长度)
var box = ['html', 'css'];
alert(box.length); // 获取数组的元素个数
box[box.length] = 'JS'; // 通过length给元素增加一个元素
box.length = 10; // 强制元素个数
- 数组转换方法
数组中具有toString()方法,会将每个值进行字符串形式的拼接,以逗号隔开;
var box = ['李四',28,'男','广州'];
alert(box); // 李四,28,男,广州 (隐式转换)
alert(box.toString());// 李四,28,男,广州
- 数组的遍历1
// 数组遍历 -- 往数组写入
var arr1 = [];
for (var i=1; i<=100; i++) {
arr1[i] = i + '、html';
}
// 数组遍历 -- 读取数组内容
for (var i=0; i<arr1.length; i++) {
console.log(arr1[i]);
}
- 数组的遍历2 — for in循环
for in循环,主要作用可以遍历数组的所有元素,可以遍历JS对象的所有属性;
格式: for(index in object){ … }
for( index in namelist ){
console.log('第' + index + '个:' + namelist[index]);
}
- 多维数组
var list = [ ['张三',18,'110'], ['李四',20,'120'], ['王五',22,'119'], ['赵六',16,'333'] ];
alert(list.length); // 4
alert(list[0]); // 张三,20,110
alert(list[2][1]); // 20
// 输出多维数组的值
for (var i=0; i<list.length; i++) {
for (var j=0; j<list[i].length; j++) {
console.log(list[i][j]);
}
}
// for in
for(i in list){
for( j in list[i] ){
console.log(list[i][j]);
}
}
- 数组的复制
// 值类型
var a = 10;
var b = a; // 值复制
b = 20;
alert(a); // 修改了b,但a值不会变
// 引用类型
var cities = ['北京','上海','广州','深圳'];
var test = cities; // 仅仅是快捷键方式的复制
test[4] = '福建';
alert(cities); // 给test添加元素,但citys值也会随之改变
// 复制数组
var newsList = []; // 创建新的数组
for(index in cities){ // 逐个赋值
newsList[index] = cities[index];
}
alert(newsList); // 北京,上海,广州,深圳
newsList[4] = '长沙';
alert(cities); // 北京,上海,广州,深圳
- 数组元素添加删除【shift、pop、push、unshift】
// shift删除数组第一个元素,返回删除的元素
var tem = arr.shift();
// unshift:往数组开头添加一个或多个元素,返回数组新的长度
temp = arr1.unshift('中国','制造');
//pop删除数组最后一个元素,返回删除的元素
temp = arr1.pop();
// push往数组尾部添加一个或多个元素,返回数组新的长度
temp = arr1.push('大米','王大锤');
三、排序
直接插入排序、冒泡排序、折半排序、希尔排序、选择排序、快速排序...
- 直接插入排序
将序列a1的第一个元素当做是已经是排序好的(a2序列),接着从第二个记录逐个插入,直到a2有序为止;
// 直接插入排序
var i = j = temp = 0;
// 将第一个元素当做是已经排序好的
for(i=1; i<arr.length; i++){
// 即是要排序的数字
temp = arr[i];
for(j=i-1; j>=0; j--){ // 往前查找(从后往前)
if (temp > arr[j]) {
break;
} else {
arr[j+1] = arr[j];
}
}
arr[j+1] = temp;
}
- 冒泡排序
相邻两个元素比较,如果第一个元素大于第二个元素,就两两交换,从开始第一对到最后一对。最后,最大的数会在最上面(数组结尾);
// 冒泡排序
var i = j = temp = 0;
for(i=0; i<arr.length-1; i++){ // 有多少趟(arr.length-1趟即可)
for(j=0; j<arr.length-1-i; j++){
if (arr[j] > arr[j+1]) { // 两两交换
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}