如何使用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 )
循环
该循环在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
方法
创建相关回调函数返回的元素的一个mew数组。
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
.length。
str.split()返回值的数组,所以在你的例子中,因为'separated'是一个数组,所以你可以:
for (var i=0, len=separated.length; i < len; i++) {
// do something with separated[i]
}
链接地址: http://www.djcxy.com/p/69999.html