javascript数组与循环详细解决方案

数组是元素的有序组合。在Javascript中,可以使用正式的对象表示创建数组,也可以使用直接的数量表示来初始化数组。

复制代码代码如下所示:

无功arrobject =新的数组(val1

var { arrliteral =val1



对开发商而言,是没有区别的:一个数组的方法可以是直接的数量和对象,Javascript引擎,有必要重新审视它的每一次访问数组直接量,特别是当它被用在一个函数。

使用新操作符创建一个新数组对象:

复制代码代码如下所示:

无功arrobject =新的数组();



还可以使用值创建一个新数组:

复制代码代码如下所示:

无功arrobject =新的数组(val1



Javascript中的数组从0被索引,这意味着第一个元素的索引是0,最后一个元素是数组的长度减去1。

1。循环遍历数组

问题:您希望轻松地访问数组的所有元素。

解决方案:

访问数组最常用的方法是使用for循环:

复制代码代码如下所示:



var动物=新数组()

无功animalstring = ;

对于(var i = 0;i < animals.length - 1;i++){

animalstring =动物{我} + ;

}

警报(animalstring);





讨论:

for循环可以用来访问数组的每个元素,数组从0开始,数组属性长度用来设置循环的结束。

2。按顺序存储和访问值

问题:以这样的方式存储值,可以按存储的方式顺序访问值。

解决方案:

为了按照接受值的顺序存储和访问值,创建了先进先出(FIFO)队列。使用Javascript数组对象的推送方法将项添加到队列中,并使用Shift来获取该项:

复制代码代码如下所示:



创建一个新数组

var队列=新数组();

按3个项目

Queue.push(第一);

Queue.push(第二);

Queue.push(第三);

获取两个项目

警报(queue.shift());

警报(queue.shift());

警报(队列);





讨论:

数组推送方法创建一个新数组元素并将其添加到数组的结尾。

复制代码代码如下所示:

Queue.push(第一);



每次将元素压入元素时,数组元素的计数都会增加。

数组移位法从数组的前端提取数组元素,从数组中删除数组元素,并返回元素:

复制代码代码如下所示:

var elem = queue.shift();



对于移位操作的每一个元素,数组元素都是自还原的,因为移位除了返回项之外也修改数组。

三.以相反的顺序存储和访问值

问题:我们希望以一种方式存储值,也就是以相反的顺序访问值。首先我们将访问最近存储的值,这是一个堆栈的后进先出法。

解决方案:

存储值相反的命令,创建一个后进先出的堆栈。使用Javascript数组对象的push方法将项目添加到堆栈上,并使用流行的方法得到的项目:

复制代码代码如下所示:



创建一个新数组

var堆栈=新数组();

按3个项目

Stack.push(第一);

Stack.push(第二);

Stack.push(第三);

弹出两个项目

警报((堆栈. POP));返回第三个项目

警报((堆栈弹出));返回第二个项目

警报(堆栈);返回第一个项目





讨论:

堆栈也是一个数组,其中每一个新添加的元素位于堆栈的顶部,并按照前向的顺序获得。

数组推送方法创建一个新元素并将其添加到数组尾部:

复制代码代码如下所示:

Stack.push(第一);



每次将元素压入元素时,数组元素的计数都会增加。

数组POP方法从数组的结尾提取数组元素,从数组中移动数组元素,并返回元素:

复制代码代码如下所示:

var elem = stack.pop();



每次元素被弹出时,数组元素计数也会减少,因为数组也被修改了。

4。数组搜索

问题:您想要搜索一个特定值的数组,如果找到它,获取数组元素的索引。

解决方案:

使用新的(ECMAscript 5)数组对象的方法indeof和字符串:

复制代码代码如下所示:



var动物=新数组()

警报(animals.indexof(大象)); / /打印3

警报(animals.indexof(密封,2)); / /打印2





虽然有时两指标浏览器和字符串的支持,这是正式在ECMAscript 5版。两种方法接受一个搜索值,然后比较它们对数组中的每个元素。如果这个值被发现,两方法返回的数组元素的索引。如果值为没有找到,返回-1.indexof返回找到的第一个元素,并返回字符串中发现的最后一个元素。

看到:

不是所有的浏览器都支持索引和字符串的,这个函数的解:

复制代码代码如下所示:



如果(!阵列。原型。指标){

array.prototype.indexof =功能(ELT / * * /){

> > > this.length VaR len = 0;

var =数(参数{ 1 })| | 0;

从=(< 0)math.ceil(从):Math.floor(从);

如果(从< 0){

从=;

}

为((;;从;从;+){){

如果(从这个{ { })

返回;

}

}

返回- 1;

}

}





5。对每个数字元素应用一个函数

问题:您希望使用函数检查数组值,如果满足给定条件,则替换它。

解决方案:

新的ECMAscript 5对象数组foreach方法是用来绑定一个回调函数为每个数组元素:

复制代码代码如下所示:



功能replaceelement(元素、指数、阵列){

如果(元素= ab){

数组{;

}

}

var字符集=新的阵列(AB

对于每个数组元素应用程序函数

CharSets.forEach(replaceelement)

警报(字符集); / /打印**,BB、CC、DD的CD,* *,* * * *。





讨论:

foreach方法接受一个参数,这是一个函数,函数本身有3个参数:一个数组元素,一个元素的索引,和一个阵列。

看到:

大多数浏览器支持foreach。然而,对于那些不支持的浏览器,这array.prototype属性可以用来模拟每个行为。

复制代码代码如下所示:



如果(!阵列。原型。foreach){

array.prototype.foreach =功能(乐趣 / *,本文* /){

> > > this.length VaR len = 0;

如果(typeof的乐趣!=函数{){

把新的TypeError();

}

VAR本文=论点{ 1 };

对于(var i = 0;i < i;i + +){

如果(我在此){

fun.call(本文,这{我},我这);

}

}

};

}





6。创建筛选数组

问题:您需要筛选数组中元素的值,并将结果分配给一个新数组。

解决方案:

使用数组对象的筛选器方法:

复制代码代码如下所示:



功能removechars(元素、指数、阵列){

返回元素;

}

var字符集=新的数组(***),BB

VaR NewArray = charsets.filter(removechars);

警报(创建一个数组); / / BB、CD、CC、DD





讨论:

过滤法是一种新的方法添加到ECMAscript 5,采用回调函数数组的每个元素,函数传递给过滤方法作为参数,返回一个布尔值true或false,这是根据测试数组元素的结果。这个返回值确定数组元素添加一个新的数组,如果函数返回TRUE,这将增加;否则,它将不会被添加。

看到:

对于不支持过滤方法的浏览器的模拟实现:

复制代码代码如下所示:



如果(!数组(原型)筛选器){

array.prototype.filter =功能(乐趣 / *,本文* /){

> > > this.length VaR len = 0;

如果(typeof的乐趣!=函数{){

把新的TypeError();

}

新数组();

VAR本文=论点{ 1 };

对于(var i = 0;i < i;i + +){

如果(我在此){

Var Val =这个{ } };乐趣修改了这个位置

如果(fun.call(本文,瓦迩,我,这)){

Res.push(Val);

}

}

}

返回水库;

};

}





7。验证数组内容

问题:要确保数组满足某个条件。

解决方案:

使用数组对象的每个方法检查给定条件的每个元素。

复制代码代码如下所示:



功能测试值(元素、指数、阵列){

var = / ^ { a-za-z } + $ /;

返回re.test(元);

}

无功elemset =新的数组(×

警报(elemset.every(测试值));





讨论:

每天和一些方法数组对象是最新的ECMAscript 5阵列的方法。不同的是,当每一个方法,只要该函数返回一个错误值,处理端和方法返回false,一些方法将继续测试该数组的每个元素,知道回调函数返回TRUE,其他元素不再验证,和方法返回TRUE。如果回调函数测试所有的元素和不回真正的在任何时间,一些方法返回FALSE。

看到:

对于不支持所有和某些浏览器的实现:

复制代码代码如下所示:



如果(!数组。原型。

array.prototype.some =功能(乐趣 / *,本文* /){

var I=0,

> > > 0 this.length len =;

如果(typeof的乐趣!=函数{){

把新的TypeError();

}

VAR本文=论点{ 1 };

为了(;;我;我;+){

如果(我在这)

fun.call(本文,瓦迩,我,这)){

返回true

}

}

返回false;

};

}

如果(!数组。

array.prototype.every =功能(乐趣 / *,本文* /){

> > > this.length VaR len = 0;

如果(typeof的乐趣!=函数{){

把新的TypeError();

}

VAR本文=论点{ 1 };

对于(var i = 0;i < i;i + +){

如果(我在这)

fun.call(本文,瓦迩,我,这)){

返回false

}

}

返回true;

};

}