🧑?🎓 个人主页:《爱蹦跶的大A阿》
🔥当前正在更新专栏:《VUE》?、《JavaScript保姆级教程》、《krpano》
??
目录
?
??
????????数组是JavaScript中最常用也是最有用的数据类型之一。合理运用数组及其方法可以使代码更简洁高效。本文将详细介绍数组的创建、添加、删除、遍历、排序等操作,以及数组常用方法的使用场景和示例,帮助大家掌握数组的精髓。
通过本文,你将学习到:
准备掌握数组的所有操作技能了吗?让我们开始这场数组的盛宴吧!
?
????????数组是JavaScript中非常常用的数据类型,它代表一个值的有序集合,每个值对应一个从0开始的数字索引。
数组的特点是:
创建数组的方式:
let arr = [1, 'hello', true];
可以指定数组长度或传入元素。
let arr1 = new Array(3); // 指定长度为3
let arr2 = new Array(1, 2, 3); // 传入元素
将参数转换为数组,参数数量不限。
Array.of(8); // [8]
Array.of(1, 2, 3); // [1, 2, 3]
可以将类数组对象或可迭代对象转换为数组。
Array.from('foo');
Array.from(document.querySelectorAll('div'));
?在平时开发中,我们最常通过字面量的形式创建数组,简单直观,足以满足大多数需求。
我们经常需要向数组添加或删除元素。添加可以通过:
删除可以通过:
示例:
let arr = [1, 2, 3];
arr.push(4); // [1, 2, 3, 4]
arr.unshift(0); // [0, 1, 2, 3, 4]
arr.pop(); // [0, 1, 2, 3]
arr.shift(); // [1, 2, 3]
arr.splice(1, 1); // 从索引1开始删除1个元素,得到[1, 3]
splice()还可以实现插入、替换等功能。
遍历(iterate)数组意味着依次访问数组的每个元素。主要的遍历方式有:
for (let i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
for (let a of arr) {
console.log(a);
}
arr.forEach(function(a) {
console.log(a);
});
let i = 0;
while (i < arr.length) {
// loop
i++;
}
arr.map(function(a) {
// loop
});
forEach()和map()是数组的高阶函数,为遍历数组提供了更优雅的方式。
需要注意的是,forEach()和map()不会改变原数组,而是返回一个新数组。
?
排序可以按字母顺序或其他标准,重新排列数组元素的位置。
let arr = [1, 2, 3];
arr.reverse(); // [3, 2, 1]
let arr = ['a', 'c', 'b'];
arr.sort(); // ['a', 'b', 'c']
sort()可以传入比较函数实现自定义排序逻辑。
Array的sort()和reverse()会改变原数组。
此外,还可以使用算法排序,如快速排序、归并排序等。
在数组中搜索元素是一个非常常见的需求,JavaScript提供了多种内置方法来实现。
let arr = [1, 2, 1, 4];
arr.indexOf(1); // 0
arr.lastIndexOf(1); // 2
arr.indexOf(3); // -1
let arr = [1, 2, 3];
let found = arr.find(function(element) {
return element > 2;
}); // 3
let index = arr.findIndex(function(x) {
return x > 2;
}); // 2
[1, 2, 3].includes(2); // true
????????这些方法极大地方便了数组元素的搜索,使用回调函数可以自定义匹配逻辑。掌握后可以解决大部分搜索需求。?
数组与字符串的相互转换也是常见的需求。
let arr = [1, 2, 3];
arr.join(); // '1,2,3'
arr.join(''); // '123'
arr.join('-'); // '1-2-3'
'a-b-c'.split('-'); // ['a', 'b', 'c']
[1, 2, 3].toString(); // "1,2,3"
这些方法为数组和字符串之间的相互转换提供了可能。
let arr2 = arr1.slice();
可以通过递归实现深拷贝。
function deepCopy(arr) {
let result = [];
for (let i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
result.push(deepCopy(arr[i]));
} else {
result.push(arr[i]);
}
}
return result;
}
?拷贝后修改数组不会影响原数组,需要根据实际需求选择浅拷贝或深拷贝。
JavaScript中的数组可以包含其他数组,形成多维数组。
let arr = [
[1, 2],
[3, 4]
];
arr[1][0]; // 返回3
多维数组提高了数据的结构化,可以表示更复杂的信息。
遍历多维数组需要嵌套循环:
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr[i].length; j++) {
// 遍历每个子数组
}
}
当数组中的元素不连续时, between 槽位被跳过,就形成了稀疏数组。
let arr = [];
arr[0] = 1;
arr[3] = 4;
arr长度为4,但只有两个元素。
稀疏数组在遍历时需要注意,通常需要检查元素是否存在。
for (let i = 0; i < arr.length; i++) {
if (arr.hasOwnProperty(i)) {
// 处理存在的元素
}
}
这就概述了JavaScript数组的主要内容,祝您数组操作愉快!有任何问题都欢迎提出?
? ? ? ??在这个多篇文章的系列探索中,我们全面介绍了数组的各种操作技巧,如定义、添加、删除、遍历、排序、搜索、转换等等。代码实例贯穿始终,使抽象的概念具象化。
????????数组是JavaScript最常用也是最有力的工具之一。合理利用数组的各种功能,可以使我们的代码更简洁高效。同时,深入理解数组的工作原理也是成为优秀JavaScript开发者的必经之路。
????????这一系列文章对数组进行了较为深入和全面的介绍,但还有很多高级功能未涉及,如链式操作、性能优化等。JavaScript的数组操作是一个宏大的主题,我们还需要持续学习,以加强数组功底。
????????感谢大家的观看!让我们继续一起探索JavaScript这个美丽的语言。坚持学习,代码水平才能不断提升。掌握数组,掌握编程的半壁江山。希望这组文章能成为你的JavaScript数组参考指南。Happy coding!
?