为什么我要放弃javaScript数据结构与算法(第二章)—— 数组

几乎所有的编程语言都原生支持数组类型,因为数组是最简单的内存数据结构。JavaScript里也有数组类型,虽然它的第一个版本并没有支持数组。本章将深入学习数组数据结构和它的能力。

为什么用数组

需求:保存所在城市每个月的平均温度,可以这么实现

var averageTemp1 = 43.3; var averageTemp2 = 53.2; var averageTemp3 = 14.2; var averageTemp4 = 42.8; var averageTemp5 = 14.8; var averageTemp6 = 78.9;

只是保存前六个月就用了6个变量,显然这种方式不适合保存这类需求。通过数组可以简单地实现我们的需求。

var averageTemp = []; averageTemp[0] = 43.3; averageTemp[1] = 53.2; averageTemp[2] = 14.2; averageTemp[3] = 42.8; averageTemp[4] = 14.8; averageTemp[5] = 78.9; 创建和初始化数组

声明、创建和初始化数组的方式很简单

var temp = new Array(); // 使用 new 关键字,简单声明并初始化一个数组 var temp = new Array(8); // 还可以创建一个指定长度的数组 var temp = new Array(1,2,4,9); // 直接将数组元素作为参数传递给它的构造器

除了用 new创建数组,还可以通过中括号 []简单创建数组。

var temp = [1,2,4,9]; 访问元素和迭代数组

通过在数组里指定特定位置的元素,可以获取该值或者赋值。而要知道一个数组里所有的元素,可以通过循环遍历数组。

for(var i = 0; i < temp.length; i++){ console.log(temp[i]); // 1,2,4,9 } 案例:斐波那契数列

已知斐波那契数列中的第一个数字是1,第二个数字是2,从第三项开始,每一项都等于前两项之和。求斐波那契数列的前20个数

var fibonacci = []; fibonacci[1] = 1; fibonacci[2] = 2; for(var i =3; i < 20; i++){ fibonacci[i] = fibonacci[i-1] + fibonacci[i-2]; } console.log(fibonacci); // [ 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765] 添加元素 var number = [1,2,3]; number[number.length] = 4; number // 1,2,3,4

上述代码可以在数组的最后一位添加元素,但其实还有更加简便的方法:

push

push 能添加任意个元素在数组的末尾

number.push(5); // 5 number.push(6,7); //7 number // [1,2,3,4,5,6,7]

数组使用 push 会返回数组的长度

插入元素到数组首位

首先我们要腾出数组的第一个元素的位置,把所有的元素向右移动一位。我们可以循环数组中的元素,从最后一位+1(长度)开始,将其对应的前一个元素的值赋给它,依次处理,最后把我们想要的值赋给第一个位置(-1)上。

for(var i = number.length; i>=0; i--){ number[i] = number[i-1]; } number[0] = -0; unshift

或者直接 使用 unshift 方法,可以将数值插入数组的首位:

var number = [1,2,3,4]; number.unshift(-2); // 5 number.unshift(-4,-3); // 7 number // [-4, -3, -2, 1, 2, 3, 4]

数组使用 unshift 会返回数组的长度

删除元素 从数组尾部删除元素 pop

要删除最靠后的元素可以使用 pop 方法,会删除并返回数组的最后一个元素。如果数组已经为空,则 pop() 不改变数组,并返回 undefined 值。

var number = [1,2,3,4]; number.pop(); //4 number // [1,2,3] number.pop() // 3 number // [1] 从数组首部删除元素

如果要移除数组里的第一个元素,可以使用下面的代码

var number = [1,2,3,4]; for(var i = 0;i < number.length; i++){ number[i] = number[i+1]; } number // [2, 3, 4, undefined]

可以看出,我们将数组左移了一位,但数组的长度仍然没有变化,这意味着数组中有一个额外的元素,因为没有定义,所以是 undefined

shift

shift() 方法用于把数组的第一个元素从其中删除,并返回第一个元素的值。 数组的长度也会发生变化。如果数组是空的,那么 shift() 方法将不进行任何操作,返回 undefined 值。

小结 修改数组的方法 描述
push   push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度。  
unshift   unshift() 方法可向数组的开头添加一个或更多元素,并返回新的长度。  
pop   pop() 方法用于删除并返回数组的最后一个元素。 如果数组已经为空,则 pop() 不改变数组,并返回 undefined 值。  
shift   shift() 方法用于把数组的第一个元素从其中删除,并返回第一个元素的值。 如果数组是空的,那么 shift() 方法将不进行任何操作,返回 undefined 值  

push() 方法和 pop() 方法,能用数组模拟基本的栈的数据结构(先进后出)。

shift()方法和unshift()方法,能用数组模拟基本的队列的数据结构(先进先出 )。

在任意位置添加或者删除元素

已经知道如何删除数组开头和结尾的元素,那么该怎么在数组中的任意位置删除或者添加元素?

splice

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgfwyw.html