0%

javascript 数组

数组

  • 数组是具有相同类型或不同类型的数据有序排列的集合(索引有序)
  • 数组属于对象数据类型,可以一次性存储多个数据

定义数组

字面量定义数组

1
2
3
var arr1 = [2, 0, 1, 9];
var arr2 = ["html", 5, "css", 3, "js", "es5"];
var arr3 = [];
  • 字面量定义是构造函数定义得简写方式,本质还是调用构造函数

构造函数定义数组

1
2
3
var arr1 = new Array(2, 0, 1, 9);
var arr2 = new Array("html", 5, "css", 3, "js", "es5");
var arr3 = new Array(3); //只有一个数字表示定义的数组长度

数组操作

遍历数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var arr1 = new Array("html", 5, "css", 3, "js", "es5");

console.log(arr1[0]); //获得 "html"
console.log(arr1[5]); //获得 "es5"
console.log(arr1[99]); //索引值超出数组返回 "undefined",不报错

for (i = 0; i < arr1.length; i++) { //遍历数组
if (arr1[i] == "html") {
console.log("\"html\" index is " + i); //获得 "html" 索引
}
if (arr1[i] == "es5") {
console.log("\"es5\" index is " + i); //获得 "es5" 索引
}
}
  • 索引值从 0 开始,到 arr1.length - 1 结束
  • 可以通过索引获取数组中的某个元素
  • 不知道元素的索引时通过遍历数组可以获得索引

替换数组元素

1
2
3
4
5
6
7
8
9
10
11
12
13
var arr1 = new Array("html", 5, "css", 3, "js", "es5");

arr1[0] = "html5"; //根据索引替换
arr1[2] = "css3"; //根据索引替换

for (i = 0; i < arr1.length; i++) {
if (arr1[i] == "html") {
arr1[0] = "html5"; //遍历数组替换元素
}
if (arr1[i] == "es5") {
arr1[2] = "css3"; //遍历数组替换元素
}
}

末尾追加

1
2
var arr1 = new Array("html", 5, "css", 3, "js", "es5");
arr1[arr1.length] = "es6";
  • 直接通过结尾的索引赋值即可
  • 通过 arr1.push() 函数可以在数组结尾追加元素

末尾删除

1
arr.length--;
  • 通过 arr1.pop() 函数可以在数组结尾删除元素

头部插入

1
2
3
4
for (var i = arr1.length - 1; i >= 0; i--) {    //其它位置修改循环条件即可
arr1[i + 1] = arr1[i];
}
arr1[0] = 2019;
  • 所有元素先整体向后,再单独为第一个元素赋值
  • 通过 arr1.unshift() 函数可以在数组头部插入元素

头部删除

1
2
3
4
for(var i = 1; i < arr1.length; i++){
arr1[i - 1] = arr1[i];
}
arr1.length--;
  • 所有元素向前移,覆盖第一个,删除最后一个空元素
  • 通过 arr1.shift() 函数可以删除数组头部元素

数组反转

1
2
3
4
5
for (var i = 0; i < arr.length / 2; i++) {
var temp = arr[i];
arr[i] = arr[arr.length - 1 - i]
arr[arr.length - 1 - i] = temp;
}
  • 变量自增小于中间数,然后首尾替换

冒泡排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function bubbleSort(arrToSort) {
// 定义第三方变量,交换数值使用
var temp;
// 执行排序的轮数,比数组元素个数少 1
for (var i = 0; i <= arrToSort.length - 1; i++) {
// 每轮排序执行的比较次数,每轮减少,同时 j 表示元素的索引
for (var j = 0; j <= arrToSort.length - 1 - i; j++) {
// 若前一个元素比后一个元素大,则交换位置
if (arrToSort[j] >= arrToSort[j + 1]) {
temp = arrToSort[j + 1];
arrToSort[j + 1] = arrToSort[j];
arrToSort[j] = temp;
}
}
}
// 返回值为排序后的数组
return arrToSort;
}

var arrNeedToSort = [12, 22, 11, 5, 2, 44, 12, 43, 55, 3];
console.log(bubbleSort(arrNeedToSort));

伪数组

  • 有 length 属性,可以索引通过获取内部数据,但不能调用数组的方法。

伪数组转真数组

  • let arr = [].slice.call(fakeArr)
    • [].slice === Array.prototype.slice true
    • [].__proto__.slice === Array.prototype.slice