数组
# 数组
# 1. 简介
数组用于存储一组数据,可以通过索引来访问和操作这些数据。数组在内存中是连续的,便于快速访问。
数组的三要素:
- 数组名称:用于区分不同的数组。
- 数组元素:存放在数组中的数据。
- 元素下标:数组元素的编号,从0开始,通过下标来访问数组元素。
# 2. 基本用法
创建数组
var array = new Array();
1为数组元素赋值
array[0] = 'apple';
1获取元素值
var firstElement = array[0];
1
# 3. 定义数组的方式
# 使用 new Array()
创建一个空数组:
var array = new Array(); // 创建一个空数组,长度为0
1创建一个指定长度的数组:
var array = new Array(4); // 创建一个长度为4的数组(只填一个数字)
1- 注意:即使指定了长度,数组长度也可以自动扩展
创建一个包含初始元素的数组:
var array = new Array('apple', 'orange', 'peach', 'banana'); // 创建一个包含初始元素的数组
1
优点
- 可以动态地创建数组,可以根据变量值决定数组的长度或内容。
- 可以直接创建一个指定长度的空数组。
缺点
- 语法稍微冗长,不如字面量简洁。
- 创建单元素数组时,如果元素是数字,可能会产生歧义(如
new Array(4)
创建的是长度为4的数组,而不是包含数字4的数组)。
# 使用数组字面量 []
创建一个空数组:
var names = []; // 创建一个空数组
1创建一个包含初始元素的数组:
var names = ['apple', 'orange', 'peach', 'banana']; // 创建一个包含初始元素的数组
1
优点
- 语法简单、直观,代码更简洁。
- 创建数组时不容易产生歧义。
缺点
- 无法直接创建一个指定长度的空数组(需要明确指定每个元素的值)。
# 4. 字符串索引数组
默认情况下,数组使用数字作为索引,但也可以使用字符串作为索引,这称为字符串索引数组(或对象)。
- 字符串索引一般称为
key
键,对应的元素称为value
值。 key
不会对数组的length
属性产生影响,所以不适合使用普通for
循环,而应该使用for...in
或for...of
循环。
示例:
var obj = [];
obj['name'] = 'John';
obj['age'] = 30;
for (var key in obj) {
console.log(key + ": " + obj[key]);
}
// 输出:
// name: John
// age: 30
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 5. 数组常用方法
方法名 | 含义 |
---|---|
reverse() | 将数组元素倒序排列 |
indexOf() | 返回指定元素在数组中第一次出现的位置 |
lastIndexOf() | 返回指定元素在数组中最后一次出现的位置 |
join() | 将数组拼接为字符串 |
concat() | 将多个数组拼接成一个数组 |
push() | 向数组末尾添加一个或多个元素,并返回新的长度 |
pop() | 删除并返回数组的最后一个元素 |
unshift() | 向数组开头添加一个或多个元素,并返回新的长度 |
shift() | 删除并返回数组的第一个元素 |
slice() | 返回数组中指定范围内的元素 |
splice() | 删除元素,并在删除位置添加新的元素,然后返回被删除的元素 |
toString() | 将数组转换为字符串 |
valueOf() | 返回数组对象本身,一般会自动调用 |
sort() | 排序,默认按字符编码的顺序排列,非 string 类型会自动转换为 string ,也可以自定义比较规则 |
forEach() | 遍历数组中的每个元素 |
# 1. reverse()
将数组中的元素倒序排列。
语法:
array.reverse();
1
示例:
var fruits = ['apple', 'orange', 'banana'];
fruits.reverse();
console.log(fruits); // 输出:['banana', 'orange', 'apple']
1
2
3
2
3
# 2. indexOf()
返回指定元素在数组中第一次出现的位置。如果数组中不存在该元素,则返回 -1。
语法:
array.indexOf(element);
1
示例:
var fruits = ['apple', 'orange', 'banana'];
console.log(fruits.indexOf('orange')); // 输出:1
console.log(fruits.indexOf('grape')); // 输出:-1
1
2
3
2
3
# 3. lastIndexOf()
返回指定元素在数组中最后一次出现的位置。如果数组中不存在该元素,则返回 -1。
语法:
array.lastIndexOf(element);
1
示例:
var fruits = ['apple', 'orange', 'banana', 'orange'];
console.log(fruits.lastIndexOf('orange')); // 输出:3
console.log(fruits.lastIndexOf('grape')); // 输出:-1
1
2
3
2
3
# 4. join()
将数组的所有元素拼接成一个字符串。
语法:
array.join(separator);
1
示例:
var fruits = ['apple', 'orange', 'banana'];
console.log(fruits.join(', ')); // 输出:"apple, orange, banana"
1
2
2
# 5. concat()
将多个数组拼接成一个新的数组,不改变原数组。
语法:
array.concat(array1, array2, ...);
1
示例:
var fruits = ['apple', 'orange'];
var moreFruits = ['banana', 'peach'];
var allFruits = fruits.concat(moreFruits);
console.log(allFruits); // 输出:['apple', 'orange', 'banana', 'peach']
1
2
3
4
2
3
4
# 6. push()
向数组末尾添加一个或多个元素,并返回数组的新长度。
语法:
array.push(element1, element2, ...);
1
示例:
var fruits = ['apple', 'orange'];
var newLength = fruits.push('banana', 'peach');
console.log(fruits); // 输出:['apple', 'orange', 'banana', 'peach']
console.log(newLength); // 输出:4
1
2
3
4
2
3
4
# 7. pop()
删除并返回数组的最后一个元素。
语法:
array.pop();
1
示例:
var fruits = ['apple', 'orange', 'banana'];
var lastFruit = fruits.pop();
console.log(fruits); // 输出:['apple', 'orange']
console.log(lastFruit); // 输出:'banana'
1
2
3
4
2
3
4
# 8. unshift()
向数组开头添加一个或多个元素,并返回数组的新长度。
语法:
array.unshift(element1, element2, ...);
1
示例:
var fruits = ['apple', 'orange'];
var newLength = fruits.unshift('banana', 'peach');
console.log(fruits); // 输出:['banana', 'peach', 'apple', 'orange']
console.log(newLength); // 输出:4
1
2
3
4
2
3
4
# 9. shift()
删除并返回数组的第一个元素。
语法:
array.shift();
1
示例:
var fruits = ['apple', 'orange', 'banana'];
var firstFruit = fruits.shift();
console.log(fruits); // 输出:['orange', 'banana']
console.log(firstFruit); // 输出:'apple'
1
2
3
4
2
3
4
# 10. slice()
返回数组中指定范围内的元素,不改变原数组。
语法:
array.slice(start, end);
1
示例:
var fruits = ['apple', 'orange', 'banana', 'peach'];
var citrus = fruits.slice(1, 3);
console.log(citrus); // 输出:['orange', 'banana']
console.log(fruits); // 输出:['apple', 'orange', 'banana', 'peach']
1
2
3
4
2
3
4
# 11. splice()
删除数组中的元素,并在删除位置添加新的元素,然后返回被删除的元素。
语法:
array.splice(start, deleteCount, item1, item2, ...);
1
示例:
var fruits = ['apple', 'orange', 'banana'];
var removedFruits = fruits.splice(1, 1, 'peach', 'grape');
console.log(fruits); // 输出:['apple', 'peach', 'grape', 'banana']
console.log(removedFruits); // 输出:['orange']
1
2
3
4
2
3
4
# 12. toString()
将数组转换为字符串。
语法:
array.toString();
1
示例:
var fruits = ['apple', 'orange', 'banana'];
console.log(fruits.toString()); // 输出:"apple,orange,banana"
1
2
2
# 13. valueOf()
返回数组对象本身,一般会自动调用。
语法:
array.valueOf();
1
示例:
var fruits = ['apple', 'orange', 'banana'];
console.log(fruits.valueOf()); // 输出:['apple', 'orange', 'banana']
1
2
2
# 14. sort()
排序数组,默认按字符编码的顺序排列,非 string
类型会自动转换为 string
,也可以自定义比较规则。
语法:
array.sort(compareFunction);
1
示例:
var fruits = ['banana', 'apple', 'peach'];
fruits.sort();
console.log(fruits); // 输出:['apple', 'banana', 'peach']
// 自定义比较规则
var numbers = [4, 2, 5, 1, 3];
numbers.sort(function(a, b) {
return a - b;
});
console.log(numbers); // 输出:[1, 2, 3, 4, 5]
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 15. forEach()
遍历数组中的每个元素。
语法:
array.forEach(function(currentValue, index, array) {
// 循环操作
});
1
2
3
2
3
示例:
var fruits = ['apple', 'orange', 'banana'];
fruits.forEach(function(fruit, index) {
console.log(index + ": " + fruit);
});
// 输出:
// 0: apple
// 1: orange
// 2: banana
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 6. 二维数组
二维数组可以看作是数组的数组,即每个元素也是一个数组。
示例:
var matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
console.log(matrix[0][1]); // 2
console.log(matrix[2][2]); // 9
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 7. 冒泡排序
冒泡排序是一种简单的排序算法,通过比较相邻的元素并交换位置来排序。
基本思想:
- 比较相邻的元素,如果第一个比第二个大,就交换它们的位置(升序)。
- 针对所有元素重复以上的步骤,直到没有任何一对数字需要交换。
示例:
var array = [5, 3, 8, 4, 2];
for (var i = 0; i < array.length - 1; i++) {
for (var j = 0; j < array.length - 1 - i; j++) {
if (array[j] > array[j + 1]) {
var temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
console.log(array); // [2, 3, 4, 5, 8]
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
总结:
- 冒泡排序的时间复杂度为 O(n^2),其中 n 是数组的长度。
- 适用于数据量较小的情况,数据量大时效率较低。
编辑此页 (opens new window)
上次更新: 2025/01/25, 22:32:05