我有一个字符串,其中的数据由管道字符(|
)分隔。
示例
var somestring = "data1|data2|data3";
var separated = somestring.split("|");
我知道如何使用 split()
函数分离数据。
但是,我不知道结果的 Array
中会有多少个管道符号。
在 jQuery 或 JavaScript 中,我该如何循环遍历返回的数组?
我有一个字符串,其中的数据由管道字符(|
)分隔。
var somestring = "data1|data2|data3";
var separated = somestring.split("|");
我知道如何使用 split()
函数分离数据。
但是,我不知道结果的 Array
中会有多少个管道符号。
在 jQuery 或 JavaScript 中,我该如何循环遍历返回的数组?
Array
。$.each
循环
此方法易于使用,并且受益于所使用的变量被封装。$.each(separated, function(index, chunk) {
// `chunk` is each member of the array.
});
当然,jQuery本质上也是JavaScript,因此下面的任何方法都可以使用。
for
循环这是推荐的方式。
for (var i = 0, length = separated.length; i < length; i++) {
var chunk = separated[i];
// `chunk` is each member of the array.
}
您也会注意到,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.
}
这个循环会遍历所有原型链上的属性,因此必须使用hasOwnProperty()
。因此不建议用于数组。
for ( of )
循环这个循环在ECMA 6中标准化,能够遍历NodeList
和迭代器。
for (var chunk of separated) {
// `chunk` is each member of the array.
}
forEach()
方法这个方法是ECMA-262标准的一个补充。它在IE8中不可用,但可以相对容易地shimmed。
separated.forEach(function(chunk, index) {
// `chunk` is each member of the array.
});
如果您正在寻找特定目标的迭代,使用专用迭代器可能会很有用。请记住,这些迭代器在浏览器支持方面并不是最好的。
filter
方法创建一个新数组,其中包含相关回调返回的真值元素。
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
方法返回一个布尔值,该值是数组中每个元素通过测试的结果。此方法进行短路处理,即当一个元素的回调函数未返回truthy时就立即返回。
separated.every(function(element) {
return element.substr(0, 1) == "a";
});
some
方法返回一个布尔值,该值是数组中某个元素是否通过测试的结果。该方法会进行短路处理,即当一个元素的回调函数通过测试后就会返回。
separated.some(function(element) {
return element.substr(0, 1) == "a";
});
for
循环的学习,我今天学到了两件新事情,而且还没到午餐时间。 - Red Tazstr.split() 返回一个值数组,所以在你的例子中,由于 'separated' 是一个数组,你可以:
for (var i=0, len=separated.length; i < len; i++) {
// do something with separated[i]
}
separated.length
应该就足够了。
你可以用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
}
Array
的最佳循环方式。 - alex使用 FOR...NEXT 结构循环,就像大多数其他语言一样:
var somestring = "data1|data2|data3";
var separated = somestring.split("|");
for (i=0 ; i<separated.length; i++) {
document.write(separated[i]);
document.write("<br/>");
}