Javascript数组的详细解决方案
创建数组有两种基本方法:第一种是使用数组构造函数,如下所示:
复制代码代码如下所示:
新数组();
如果知道数组要保存的项的数量,也可以传递构造函数参数,参数将自动成为长度属性的值,如下所示:
复制代码代码如下所示:
新数组(20);
您还可以传递一个数组中应该包含的项数组,如下面的代码所示:
复制代码代码如下所示:
新数组(红色)
此外,当使用数组构造函数时,可以省略新操作符,如下所示:
复制代码代码如下所示:
var颜色=数组(20);
创建数组的第二种方法是使用数组文字表示。数组文字由一对方括号表示,其中包含一个数组项,由多个数组项之间的逗号分隔,如下所示。
复制代码代码如下所示:
红色
变量名{ };
VaR值= {1,2,} / / IE8和前3项,其他2项,不推荐使用
与对象一样,当使用数字文字表示时,数组构造函数也不会被调用。
在读取和设置数组的值时,使用一个基于0的索引使用方括号,并提供相应的值,如下所示:
复制代码代码如下所示:
颜色红色
警报(颜色{ 0 });
颜色{ 1 } 黑色
颜色{ 2 } 棕色第三
长度属性中数组中存储的项数,这个属性总是返回0个或更多个数字,如下所示:
复制代码代码如下所示:
颜色红色
变量名{ };
警报(颜色,长度); / 3
警报(名称,长度)0
值得注意的是,数组的长度值是不read-only.so,通过设置这个值,你可以从数组的末尾删除项目或将项目添加到数组,如下:
复制代码代码如下所示:
var颜色= 红色
colors.length = 1;
警报(颜色{ 1 });
使用长度属性也可以很容易地将数据添加到数组的结尾。
复制代码代码如下所示:
var颜色= 红色
颜色{颜色长度为黑色;添加位置2
颜色{颜色长度为棕色添加位置3
1。探测阵列
一个网页或全球范围,instanceof运算符可以做到:
复制代码代码如下所示:
如果(值是数组){
操作
}
在全球范围内的instanceof说谎的局限性,如果一个网页包含多个框架,有两个以上的全局执行环境。为了解决这个问题,ecmascript5加入Array.isArray()方法,它是用如下:
复制代码代码如下所示:
如果(Array.isArray(值)){
操作
}
2,变换法
toString()方法调用返回一个逗号分隔的字符串数组,通过数组中的每个值的字符串连接。叫()返回值或数组,如下所示:
复制代码代码如下所示:
VaR的颜色= {红','蓝色'、‘绿色'};
警报(colors.tostring()); / /红色,蓝色,绿色
警报(colors.valueof()); / /红色,蓝色,绿色
警报(颜色)红色、蓝色、绿色
的tolocalstring()(),(),和价值tistring()方法继承了数组将在默认情况下一个逗号分隔符的形式返回一个数组项。如果加入()方法使用不同的分隔符,可以用来构建字符串,加入()方法接受只有一个参数,即一个字符串作为分隔符,如下图所示:
复制代码代码如下所示:
VaR的颜色= {红','蓝色'、‘绿色'};
警报(colors.join(',')); / /红色,蓝色,绿色
警报(colors.join(' | ')); / /红蓝绿| |
如果数组中的一个项目是零或undefied,那么价值是通过在加入空字符串表示(),(),tolocalstring tistring()和()方法的价值。
3、堆栈法
Javascript专门为数组提供推()和POP()操作,以便实现类似堆栈的行为。
推()方法可以接收任意数量的参数,将它们一个接一个地添加到数组的结尾,并返回修改后的数组的长度。
复制代码代码如下所示:
var颜色=新的(数组);定义数组
VaR计算= colors.push(红
警报(计数);2
数= colors.push(黑 / /出版社);在另一个
警报(计数);3
var = colors.pop(项); / /流行上
警报(项目)
警报(颜色,长度); / 2
4。队列的方法
堆栈数据结构的访问规则是后进先出(前先出),和队列访问规则FIFO(先进先出)。队列在列表的尾部添加项目和移动项目的前端。
移位()方法可以删除数组中的第一个项目,项目回报,该数组的length-1。结合推()和移位()方法,你可以使用一个数组就像一个队列,如下图所示:
复制代码代码如下所示:
新数组();
VaR计算= colors.push(红
数= colors.push(黑);
警戒(计数);
var = colors.shift(项); / /第一
警报(项目)
警报(颜色,长度); / 2
ECMAscript提供unshift()的阵列的方法。unshift()和()方法使用转向相反:它增加了阵列的前端任意一项并返回新数组的长度。因此,使用unshift()和()的转变的同时,我们可以模拟队列从相反的方向,即增加新的项目在前面的数组和数组的末尾删除项目。
复制代码代码如下所示:
新数组();
VaR计算= colors.push(红
警报(计数);2
数= colors.unshift(黑); / /到另一个
警报(计数);3
var = colors.pop(项); / /得到的最后一个
警报(项目)绿色
警报(颜色,长度)2
5。排序方法
有两种方法可以直接用于数组中的重新排序:反向()和排序()。反向()方法由反向数组项排序。
复制代码代码如下所示:
var值{ 2, 1, 3,4, 5 };
values.reverse();
警报(值); / / 5,4,3,2,1
默认情况下,排序()方法调用toString()的顺序每个项目的方法,并对字符串进行比较来确定如何排序。即使在一个数组中每一项都是一个数值,排序()方法是一个字符串。
复制代码代码如下所示:
var值{ 12, 11, 3,4, 5 };
values.sort();
警报(值); / / 12,11,3,4,5
我们可以传递一个比较函数作为参数来排序()方法:
复制代码代码如下所示:
(value1,value2功能比较){
如果(value1 value2 P<0.05){
返回1
} else if(value1 value2 { >)
返回1
{人}
返回0
}
}
var值{ 0, 1, 5,10, 15 };
values.sort(比较);
警报(值); / / 0,1,5,10,15
6。操作方法
ECMAscript提供许多方法在数组操作。在此,Concat()方法可以创建一个基于当前数组中的所有项目的新阵列。
复制代码代码如下所示:
var颜色= 红色
无功colors2 = colors.concat(黄),{黑色
警报(颜色);红色、绿色、蓝色
警报(colors2); / /红色,绿色,蓝色,黄色,黑色,棕色
切片()方法可以创建一个基于一项或多项当前数组的数组,它可以接收一个或两个参数,即返回的起始和结束位置的项目。当一个参数是一个参数,返回指定位置参数的所有物品的当前数组的结尾。两参数返回的所有项目开始到指定的位置不包括项目结束。注意滑动()方法不影响原数组。
复制代码代码如下所示:
var颜色= 红色
无功colors2 = colors.slice(1);
无功colors3 = colors.slice(1,4);
警报(colors2); / /绿色,蓝色,黑色,棕色
警报(colors3); / /绿、蓝、布莱克
删除方法:可以删除任意数量的项,2个参数只删除第一个位置和删除项。
(切片)方法:插入可以插入任意数量的项到指定位置,3个参数:起始位置,只需要提供0(要删除的项数)和插入项。
(滑动)法可以代替:指定项插入任意数量的项目,和任何数量的物品也删除3个参数只需要指定起始位置,被删除和插入任意数量的项目,项目数。
复制代码代码如下所示:
var颜色= 红色
删除
var删除= colors.slice(0, 1); / /删除第一
无功colors3 = colors.slice(1, 4);
警报(颜色)
警报(已删除);
插入
删除= colors.slice(1, 0,黄
警告(颜色);绿色、黄色、橙色、蓝色
警报(已删除);空数组
替换
删除= colors.slice(1, 1,红
警报(颜色);绿色,红色
警报(已删除);
7,位置法
ecmascript5为阵列两定位方法:()和()返回字符串。两种方法接受两个参数:要看项目和代表的起点位置的索引(可选)。indexOf()方法从数组和字符串的开始,()方法开始期待从数组的末尾。
这两种方法都返回在数组中找到的项的位置,并返回到1而不找到它们。
复制代码代码如下所示:
var = { 1, 2, 3,4, 5, 4,3, 2, 1 };
警报(numbers.indexof(4)) / / 3
警报(numbers.lastindexof(4)) / / 5
警报(numbers.indexof(4, 4)) / / 5
警报(numbers.lastindexof(4, 4)) / / 3
8,迭代法
ecmascript5定义了5个迭代方法的阵列,每个方法接受两个参数,第一个是一个迭代函数,第二是函数{可选范围对象}。
迭代函数接受三个参数。第一个是数组中要迭代的元素的值,第二个是数组中总是迭代的元素的位置,第三个是迭代数组本身。
1。每个()为数组中的每一项运行一个给定函数,如果函数返回每个项的true,则返回true。
2。筛选器()为数组中的每个项运行一个给定函数,并返回一个函数返回一个真正项的数组。
三.foreach()运行一个给定的每项功能的阵列。此方法不返回值4。map(),它为数组中的每个函数返回一组数组。
5。一些()为数组中的每个项运行一个给定函数,如果函数返回到任何项,返回true。
浏览器支持这些迭代方法,IE9 +,Firefox2 +,safari3 +,Opera 9.5 +,铬
在这些方法中,最相似的是每()和一些(),这是用来查询是否在数组中满足条件的一项。每(),传入的函数必须返回到真实的每一个项目,这个方法返回true;否则,他返回FALSE。一些()方法返回true只要输入的函数返回一个数组中的项。
复制代码代码如下所示:
VaR Num = { 1,2,3,4,5,6,7,8,9 };
无功everyresult = num.every(功能(项目、指标、阵列){
如果(项目> 2){
返回true;
}
});
警报(everyresult); / /假
无功someresult = num.some(功能(项目){)
如果(项目> 2){
返回true;
}
});
警报(someresult); / /真的
筛选器()使用指定的函数确定返回数组中是否包含某个项。
复制代码代码如下所示:
VaR Num = { 1,2,3,4,5,4,3,2,1 };
无功filterresult = num.filter(功能(项目){)
如果(项目> 2){
返回true;
}
});
警报(filterresult); / / { 3,4,5,4,3 }
map()返回一个数组,每个数组在原始数组的相应项上运行传入函数的结果。
复制代码代码如下所示:
VaR Num = { 1,2,3,4,5,4,3,2,1 };
无功mapresult = num.map(功能(项目){)
如果(项目> 2){
返回true;
}
}); / / { 2,3,6,8,10,8,6,4,2 }
foreach()是一个函数,通过对阵列中的每一个运行。此方法不返回一个值,基本相同,使用for循环迭代数组。
复制代码代码如下所示:
VaR Num = { 1,2,3,4,5,4,3,2,1 };
num.foreach(功能(项目){)
操作
});
9、合并方法
两添加新的方法在ecmascript5:reduceright()和减少()。两种方法接受两个参数:第一个是用来遍历数组的功能。函数有四个参数,即前一个值、当前值、该项的索引和数组对象,但是这个函数的任何值都会自动作为第一个参数传递给下一个项,第二个参数是第一个函数中第一个参数的初始值。
复制代码代码如下所示:
VaR号= { 12345 };
VaR和= nums.reduce(功能(沪指,cur,指数、阵列){
回沪指+电流;
});
警报(总和);15