如何使用JavaScript循环数组?
我有一个字符串,其数据由管道符( |
)分隔。
例
var somestring = "data1|data2|data3"; var separated = somestring.split("|");
我知道如何使用split()
来分隔每个数据。
但是,我不知道生成的Array
中将有多少个管道。
在jQuery或JavaScript中,如何循环返回的数组?
在jQuery或JavaScript中,如何遍历每个分离的变量?
您基本上只需要迭代生成的Array
。
jQuery的
$.each
循环
该方法易于使用,并且在封装的变量中有益。
$.each(separated, function(index, chunk) { // `chunk` is each member of the array. });
jsFiddle 。
当然,jQuery 是 JavaScript,因此下面的任何方法都可以使用。
JavaScript的
for
循环
这是推荐的方式。
for (var i = 0, length = separated.length; i < length; i++) { var chunk = separated[i]; // `chunk` is each member of the array. }
jsFiddle 。
您还会注意到length
属性被缓存,因此在每次迭代时都不会查找它。 一些浏览器已经针对此进行了优化 ,但IE似乎仍然可以从缓存中受益。 它只需要5秒钟,所以你也可以保持IE用户的快乐。
您可能希望在for
循环之外定义i
和chunk
,因为JavaScript没有块作用域(除非您使用let
),并且这些变量将存在于(声明提升)之后和之后(无块作用域)。
for ( in )
循环
通常不推荐使用此循环,因为它应该仅用于迭代对象属性,而不是像成员属性那样的数组。
for (var chunk in separated) { if ( ! separated.hasOwnProperty(chunk)) { continue; } // `separated[chunk]` is each member of the array. }
jsFiddle 。
这个循环将循环遍历原型链的所有属性,因此必须使用hasOwnProperty()
。 因此,建议不要使用数组。
for ( of )
loop
此循环在ECMA 6中标准化,并且能够循环遍历NodeList
和迭代器。
for (var chunk of separated) { // `chunk` is each member of the array. }
的jsfiddle
forEach()
方法
该方法是ECMA-262标准的补充。 它在IE8中不可用,但它可以相对容易地填充 。
separated.forEach(function(chunk, index) { // `chunk` is each member of the array. });
jsFiddle 。
其他专业方法
如果您希望迭代特定目标,使用专门的迭代器可能会很有用。 请记住,这些也没有最好的浏览器支持。
filter
方法
创建一个新的元素数组,相关的回调返回truthy 。
separated.filter(function(element) { return +element > 255; });
reduce
方法
基于从左到右减少数组元素创建新值。
separated.reduce(function(accumulator, element) { return accumulator.concat(element); }, "");
另请参见reduceRight
方法。
map
方法
创建一个新数组,用相关回调的返回值替换每个元素。
separated.map(function(element) { return element.substr(0, 1); });
every
方法
返回一个布尔值,该值是传递测试的数组中每个元素的结果。 这种方法短路,即只要一个元素的回调没有返回真值,它就会返回。
separated.every(function(element) { return element.substr(0, 1) == "a"; });
some
方法
返回一个布尔值,该值是传递测试的数组中某个元素的结果。 此方法短路,即只要一个元素的回调通过测试,它就会返回。
separated.some(function(element) { return element.substr(0, 1) == "a"; });
separated.length
应该是你所需要的。
str.split()返回一个值数组,因此在您的示例中,由于’separated’是一个数组,您可以:
for (var i=0, len=separated.length; i < len; i++) { // do something with separated[i] }
你可以在这样的jquery中做到这一点
$.each(separated,function(key,item){ alert('here is ' + item + ' at position ' + key) })
如果您的问题确实是“我如何遍历每个分离的变量?” 然后:
for (var i = 0; i < separated.length; i++) { //Do something with separated[i]; } //or (apparently this is deprecated) for(var a in separated) { //Do something with a }
像大多数其他语言一样使用FOR … NEXT结构循环:
var somestring = "data1|data2|data3"; var separated = somestring.split("|"); for (i=0 ; i "); }