我有一个字符串,其中的数据由竖线字符(|
)分隔。
示例
var somestring = "data1|data2|data3";
var separated = somestring.split("|");
我知道如何使用split()
来分隔每个数据。
但是,我不知道在生成的Array
中会有多少管道。
在jQuery或JavaScript中,如何遍历返回的数组?
发布于 2011-06-02 07:44:01
在jQuery或JavaScript中,如何遍历每个分离的变量?
基本上,您只需要迭代生成的Array
。
jQuery
$.each
loop
这种方法很容易使用,并且其优点在于所使用的变量被封装。
$.each(separated, function(index, chunk) {
// `chunk` is each member of the array.
});
jsFiddle。
当然,jQuery是JavaScript,所以下面的任何一种方法也可以。
JavaScript
这是推荐的方式。
for (var i = 0, length = separated.length; i < length; i++) {
var chunk = separated[i];
// `chunk` is each member of the array.
}
jsFiddle。
您还会注意到,length
属性被缓存,因此不会在每次迭代中查找它。Some browsers already optimise for this,但是IE似乎仍然从它的缓存中受益。这只需要5秒钟,所以你也可以让IE用户满意。
您可能希望在for
循环之外定义i
和chunk
,因为JavaScript没有块作用域(除非您正在使用let
),并且这些变量将存在于之前(声明hoisted)和之后(没有块作用域)。
通常不推荐使用此循环,因为它应该仅用于迭代对象属性,而不是像数组一样的成员属性。
for (var chunk in separated) {
if ( ! separated.hasOwnProperty(chunk)) {
continue;
}
// `separated[chunk]` is each member of the array.
}
jsFiddle。
这个循环将遍历原型链上的所有属性,因此必须使用hasOwnProperty()
。因此,不建议将其用于数组。
这个循环在ECMA6中是标准化的,并且能够遍历NodeList
和迭代器。
for (var chunk of separated) {
// `chunk` is each member of the array.
}
jsFiddle
该方法是对ECMA-262标准的补充。它在IE8中不可用,但是它可以相对容易地被shimmed。
separated.forEach(function(chunk, index) {
// `chunk` is each member of the array.
});
jsFiddle。
其他专门化方法
如果你想迭代一个特定的目标,使用一个专门的迭代器可能会很有用。请记住,这些浏览器也没有最好的浏览器支持。
创建一个元素的新数组,关联的回调为其返回the。
separated.filter(function(element) {
return +element > 255;
});
根据从左到右减少数组的元素来创建新值。
separated.reduce(function(accumulator, element) {
return accumulator.concat(element);
}, "");
另请参阅reduceRight
方法。
创建一个新数组,将每个元素替换为关联回调的返回值。
separated.map(function(element) {
return element.substr(0, 1);
});
返回一个布尔值,该值是数组中通过测试的每个元素的结果。此方法短路,即只要一个元素的回调没有返回truthy,它就会返回。
separated.every(function(element) {
return element.substr(0, 1) == "a";
});
返回一个布尔值,该值是数组中通过测试的某个元素的结果。此方法短路,即只要一个元素的回调通过测试,它就会返回。
separated.some(function(element) {
return element.substr(0, 1) == "a";
});
发布于 2011-06-02 07:43:35
separated.length
应该就是您所需要的。
发布于 2011-06-02 07:44:52
str.split()返回一个值数组,因此在您的示例中,由于'separated‘是一个数组,因此您可以:
for (var i=0, len=separated.length; i < len; i++) {
// do something with separated[i]
}
https://stackoverflow.com/questions/6208964
复制相似问题