数组(Array)是一种数据结构,用于存储具有相同类型的数据元素的有序集合。
1.定义数组
// 通过字面量方式定义数组: let 数组名 = [值, 值, 值];
let numbers = [1, 2, 3, 4, 5];
// 通过构造函数定义数组: let 数组名 = new Array(值, 值, 值);(new Array() 是固定写法)
let fruits = new Array("apple", "banana", "cherry");
2.遍历数组(通过循环的方式获取数组中的值)
let numbers = [1, 2, 3, 4, 5];
for (let i = 0; i < numbers.length; i++) {
console.log(numbers[i]);
}
// 或者使用 forEach 方法
numbers.forEach(number => console.log(number));
3.访问数组元素
let numbers = [1, 2, 3, 4, 5];
let firstNumber = numbers[0]; // 1
let fruits = ['apple', 'banana', 'cherry'];
let secondFruit = fruits[1]; // 'banana'
4.更新数组元素
let numbers = [1, 2, 3, 4, 5];
numbers[2] = 10; // 数组现在为 [1, 2, 10, 4, 5]
let fruits = ['apple', 'banana', 'cherry'];
fruits[1] = 'blueberry'; // 数组现在为 ['apple', 'blueberry', 'cherry']
5.常用方法
1)添加元素到数组:
- push() 向数组末尾添加一个或多个元素,并返回新的数组长度。
let arr = [1, 2, 3];
arr.push(4, 5);
console.log(arr); // 输出: [1, 2, 3, 4, 5]
- unshift() 向数组开头添加一个或多个元素,并返回新的数组长度。
let arr = [1, 2, 3];
let newLength = arr.unshift(0, 1);
console.log(newLength); // 输出: 5
console.log(arr); // 输出: [0, 1, 1, 2, 3]
2)从数组中删除元素:
-
pop() 删除数组的最后一个元素,并返回该元素。
let arr = [1, 2, 3];
let lastElement = arr.pop();
console.log(lastElement); // 输出: 3
console.log(arr); // 输出: [1, 2]
-
shift() 删除数组的第一个元素,并返回该元素。
let arr = [1, 2, 3];
let firstElement = arr.shift();
console.log(firstElement); // 输出: 1
console.log(arr); // 输出: [2, 3]
3)合并数组:
- concat() 合并两个或多个数组,不改变现有数组,返回一个新数组。
let arr1 = [1, 2, 3];
let arr2 = [4, 5, 6];
let arr3 = [7, 8, 9];
let newArr = arr1.concat(arr2).concat(arr3);
console.log(newArr); // 输出: [1, 2, 3, 4, 5, 6, 7, 8, 9]
4)转换数组为字符串:
- join() 把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。
let arr = ['apple', 'banana', 'orange'];
let str = arr.join('、 ');
console.log(str); // 输出: "apple、 banana、 orange"
5)查找数组元素:
- indexOf() 返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1。
let arr = ['a', 'b', 'c', 'a', 'b', 'c'];
let index = arr.indexOf('a');
console.log(index); // 输出: 0
- includes() 判断一个数组是否包含一个指定的值,根据情况,如果包含则返回
true
,否则返回false
。这个方法是区分大小写的,并且使用全等比较(===
)。
const array = [1, 2, 3, 4, 5];
console.log(array.includes(3)); // 输出 true,因为数组包含元素3
console.log(array.includes(6)); // 输出 false,因为数组不包含元素6
console.log(array.includes(2, 2)); // 输出 false,从索引2开始搜索,不包含元素2
console.log(array.includes(3, -3)); // 输出 true,从倒数第三个索引开始搜索,包含元素3
6)数组切片:
- slice() 返回一个新的数组对象,这一对象是一个由开始到结束(不包括结束)的浅拷贝的原数组的片段。
let arr = ['apple', 'banana', 'orange', 'kiwi', 'melon'];
let slicedArray = arr.slice(1, 4);
console.log(slicedArray); // 输出: ["banana", "orange", "kiwi"]
7)数组元素的添加和删除:
- splice() 通过删除现有元素和/或添加新元素来更改一个数组的内容。
let arr = ['apple', 'banana', 'orange', 'pear'];
arr.splice(1, 2, 'kiwi', 'melon');
// 1是索引位置,2是元素个数,'kiwi', 'melon'是要替换的新元素
console.log(arr);
// 最后输出: ["apple", "kiwi", "melon", 'pear']
8)数组排序:
- sort() 对数组的元素进行排序,并返回排序后的数组。(a-b为升序,b-a为降序)
// 默认排序(字符串排序,按照字符串的Unicode码点进行排序)
let fruits = ['banana', 'apple', 'cherry'];
fruits.sort();
console.log(fruits); // 输出: ["apple", "banana", "cherry"]
// 数值排序
let numbers = [4, 2, 5, 1, 3];
numbers.sort((a, b) => a - b);
console.log(numbers); // 输出: [1, 2, 3, 4, 5]
// 对象数组排序(按对象属性排序)
let users = [
{ name: 'John', age: 30 },
{ name: 'Jane', age: 25 }
];
users.sort((a, b) => a.age - b.age);
console.log(users);
// 输出: [{ name: 'Jane', age: 25 }, { name: 'John', age: 30 }]
9)数组反转:
- reverse() 颠倒数组中元素的顺序。
let arr = [1, 9, 2, 3, 4, 5];
arr.reverse();
console.log(arr); // 输出: [5, 4, 3, 2, 9, 1]
10)数组去重:
- Set() 是一个不包含重复元素的集合,可以通过将数组转换为
Set
来去除重复项,然后再将其转换回数组。(注意首字母大写)
const arr = [1, 2, 2, 3, 4, 4, 5];
const uniqueArr = [...new Set(arr)];
console.log(uniqueArr); // 输出: [1, 2, 3, 4, 5]
- Map() 是一个键值对的集合,其中每个键只能出现一次。可以通过
Map
来确保每个元素都是唯一的。(注意首字母大写)
const arr = [1, 2, 2, 3, 4, 4, 5];
const uniqueArr = Array.from(new Map(arr.map(item => [item, item])).values());
console.log(uniqueArr); // 输出: [1, 2, 3, 4, 5]