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;
};
}