title: JavaScript与数据结构之数组
tags:
- JavaScript
- 数据结构
- 有坑待填
categories: - 编程语言
date: 2019-04-03 21:19:38
🌞创建和初始化数组
- 数组的创建和循环遍历
// 创建一个不指定长度的空数组var dayOfWeek = new Array()console.log('dayOfWeek: ' + dayOfWeek)// 创建一个指定长度的数组var dayOfWeek1 = new Array(7)console.log('dayOfWeek: ' + dayOfWeek1)// 创建的同时将数据以参数的形式传入var dayOfWeek2 = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday')console.log('dayOfWeek2', dayOfWeek2)// 直接使用[]创建数组var dayOfWeek3 = []console.log('dayOfWeek3', dayOfWeek3)// 创建时为数组填充数据var dayOfWeek4 = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']console.log('dayOfWeek4', dayOfWeek4)// 查看数组长度console.log('dayOfWeek4.length:', dayOfWeek4.length)// 循环输出数组中元素for(var i = 0; i < dayOfWeek4.length; i++) {console.log('dayOfWeek4['+ i +']:', dayOfWeek4[i])}
运行结果:

求“斐波那契数列的前20个数字”
已知斐波那契数列中第一个数字是1,第二个数字是2,从第三项开始,每一项都等于前两项的和。
var fibonacci = []fibonacci[0] = 1fibonacci[1] = 2for (var i = 2; i < 19; i++) {fibonacci[i] = fibonacci[i - 1] + fibonacci[i - 2]}for (var i = 0; i < fibonacci.length; i++) {console.log('fibonacci['+ i +']:', fibonacci[i])}
- 结果:

🌞添加和删除数组
为数组(尾部)添加一个元素
// 数组初始化var numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]// 为数组(尾部)添加一个元素numbers[numbers.length] = 10console.log('numbers:', numbers)
在JavaScript中,数组是一个可以修改的对象。如果添加一个元素,它就会动态增长。在C和Java等其他语言中,我们如果要决定数组的大小,想要添加元素就要创建一个新的数组,不能简单地往其中添加所需的元素。
使用
push往数组尾部添加一个元素,通过push方法可以添加任意一个元素。numbers.push(11)numbers.push(12, 13)console.log('numbers使用push之后:', numbers)
为数组的头部添加一个元素:为了实现这个需求,我们腾出数组里的第一个元素的位置,把所有的元素向后移动一位。我们可以循环数组中的元素,从最后一位+1(长度)开始,将其对应的前一个元素的值赋给它,依次处理,最后把我们想要的值赋给第一个位置(-1)上。
for(var i = numbers.length; i >= 0; i--) { numbers[i] = numbers[i - 1]
这里i初始值为数组长度,利用了数组“下标”比“位置”小1的特点,numbers数组最后一位值为14,下标是13,`numbers.length`是14,也就是把不存在的`numbers[14]`先赋值为`numbers[13]`的值14,然后依次把前面一位的值赋给后面一位,`i >= 0`是为了保留出`numbers[0]`这个首位的位置,然后使用`numbers[0] = -1`把首位赋值。* 执行结果:5. 使用`unshift`删除数组中的元素
结果:
从数组中移除元素:
- 循环错位覆盖从后向前覆盖,移除第一个元素的值:
// 使用循环错位覆盖,删除数组第一个元素for (var i = 0; i < numbers.length; i++) {numbers[i] = numbers[i+1]}console.log('循环错位覆盖删除第一个元素', numbers)
- 循环错位覆盖从后向前覆盖,移除第一个元素的值:

我们把数组中的所有元素都向左移动了一位,但是数组的长度还是17,这意味着数组中有额外的一个元素(值为undefined)。在最后一次循环中,i + 1引用了一个数组里还未初始化的位置,如果是在其他语言中,这样写可能就会报错了,不得不在numbers.length - 1的位置就停止循环。这些操作只是将数组第一位的值用第二位的值覆盖了,并没有删除元素,数组的长度和以前还是一样的,并且多了一个未定义的元素。
使用shift()方法:
- 删除数组中的第一个元素,可以使用内置的shift()方法,执行该方法后,不但值被移除,而且数组长度也会减一,位置也会被移除。
// 使用shift()方法移除数组中的元素numbers.shift()console.log('使用shift()方法移除数组之后:', numbers)
- 删除数组中的第一个元素,可以使用内置的shift()方法,执行该方法后,不但值被移除,而且数组长度也会减一,位置也会被移除。

5. 使用shift()和unshift()方法,可以使用数组模拟基本的队列结构和一些操作。
在任意位置添加或删除数组中的元素
- 通过splice()删除从任意位置上删除任意个连续数组内元素。
numbers.splice(5, 3),这段代码删除了从5开始的3个元素,这就意味着numbers[5]、numbers[7]、numbers[7]被删除了,
- 通过splice()删除从任意位置上删除任意个连续数组内元素。
🌞二维和多维数组
🌞JavaScript数组方法
- 数组合并
- 迭代器函数
- 搜索和排序
- 输出数组为字符串
代码地址:https://gitee.com/sdsxfjh/javascript_and_data_structure
