- 数组可以用来存储一组相同类型的值
- 数组的存储会在内存中开辟一片连续的内存空间
- 可以通过索引直接获取数组中的元素,时间复杂度为O(1)
- 数组利查询,不利添加和删除操作,在数组中间插入和删除时,会导致大部分的数据存储位置发生移动
访问和迭代数组
- 可以通过下标的方式直接访问数组中的元素
- 迭代数组的方式
- for循环
- forEach
- map
- 等等
求斐波那契数列的第N项和前N项和
- 斐波那契数列规律
在末尾添加元素 - push
- push方法可以添加多个参数
// 1.原生的push方法
let arr = [1, 2, 3, 4, 5];
arr.push(6);
console.log(arr);
function _push(n, nums) {
nums[nums.length] = n;
}
_push(7, arr);
console.log(arr);
在开头添加元素 - unshift
- 可以添加多个参数
// 1.原生unshift方法
let arr = [1, 2, 3];
arr.unshift(0);
console.log(arr);
// 1.所有元素往后移动一位
// 2.将添加的元素放在索引为0的位置
function _unshift(nums, n) {
for (let i = nums.length; i > 0; i--) {
nums[i] = nums[i - 1];
}
nums[0] = n;
return nums;
}
console.log(_unshift(arr, -1));
在中间插入元素
- 该位置往后的元素向后移动一位
// 1.该位置往后的元素向后移动一位
// 2.将添加的元素放在该位置
function _insert(nums, n, index) {
// 比较数组的长度和插入位置
if (nums.length - 1 > index) {
for (let i = nums.length; i > index; i--) {
nums[i] = nums[i - 1];
}
nums[index] = n;
return nums;
}
nums[index] = n;
return nums;
}
let arr = [1, 2, 3];
console.log(_insert(arr, 4, 1));
删除元素
- 删除元素
- 在末尾删除元素,将末尾值设置为undefined
- 在开头删除元素,将每个元素都向前移动一位
- 在中间删除元素,将该位置之后的每个元素都向前移动一位
末尾删除元素 - pop
// 原生pop方法
let arr = [1, 2, 3, 4, 5, 6, 7];
arr.pop();
console.log(arr);
// 1.创建一个新的空数组
// 2.通过push方法+遍历的手段将除了最后一项的元素添加到新数组
function _pop(nums) {
let newNums = [];
for (let i = 0; i < nums.length - 1; i++) {
newNums.push(nums[i]);
}
return newNums;
}
console.log(_pop(arr));
开头删除元素 - shift
- 所有元素向后移动一位
- 添加元素放在开头
// 原生shift
let arr = [1, 2, 3, 4, 5, 6];
arr.shift();
console.log(arr);
// 1.创建一个新的数组
// 2.将除了第一位的元素遍历添加到新数组
function _shift(nums) {
let newNums = [];
for (let i = 1; i < nums.length; i++) {
newNums.push(nums[i]);
}
return newNums;
}
console.log(_shift(arr));
遍历多维数组
本质上就是遍历一维数组,需要用到for循环的嵌套
- 不要将内部的数组看成数组,先简单看成数值,优先遍历外层数组,再一层一层的遍历即可
let arr = [ // 先将数组看成[a,b,c],等遍历完完成数组后再将a,b,c看成数组对其进行遍历
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12, 13],
];
function traverse(arr) {
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr[i].length; j++) {
console.log(arr[i][j]);
}
}
}
console.log(traverse(arr));