Array数组遍历
Array.prototype.map()(IE9+)
map() 方法创建一个新数组,其结果是该数组中的每个元素是调用一次提供的函数后的返回值。
- 当你不打算使用返回的新数组却使用
map是违背设计初衷的,请用forEach或者for-of替代; - 你不该使用
map: A)你不打算使用返回的新数组,或/且 B) 你没有从回调函数中返回值; map不修改调用它的原数组本身(当然可以在callback执行时改变原数组);返回值一个由原数组每个元素执行回调函数的结果组成的新数组。
Array.prototype.forEach()(IE9+)
forEach() 方法对数组的每个元素执行一次给定的函数。
-
forEach()方法按升序为数组中含有效值的每一项执行一次callback函数,那些已删除或者未初始化的项将被跳过(例如在稀疏数组上) -
forEach()被调用时,不会改变原数组,也就是调用它的数组(尽管callback函数在被调用时可能会改变原数组) -
除了抛出异常以外,没有办法中止或跳出
forEach()循环 -
若你需要提前终止循环,你可以使用:
-
这些数组方法则可以对数组元素判断,以便确定是否需要继续遍历:
-
译者注:只要条件允许,也可以使用
filter()提前过滤出需要遍历的部分,再用forEach()处理。 -
返回值undefined。
for(IE3+)
for语句用于创建一个循环,它包含了三个可选的表达式,这三个表达式被包围在圆括号之中,使用分号分隔,后跟一个用于在循环中执行的语句(通常是一个块语句)。for语句头部圆括号中的所有三个表达式都是可选的。- 你当然可以忽略所有的表达式。同样的,确保使用了
break语句来跳出循环并且还要修改(增加)一个变量,使得 break 语句的条件在某个时候是真的。
for...of(IE不兼容)
for...of语句在可迭代对象(包括 Array,Map,Set,String,TypedArray,arguments 对象等等)上创建一个迭代循环,调用自定义迭代钩子,并为每个不同属性的值执行语句
- 对于
for...of的循环,可以由break,throw continue或return终止。在这些情况下,迭代器关闭。 for...of与for...in的区别
for...in(IE6+)
for...in语句以任意顺序遍历一个对象的除Symbol以外的可枚举属性。
- 提示:
for...in不应该用于迭代一个关注索引顺序的Array。 for ... in是为遍历对象属性而构建的,不建议与数组一起使用,数组可以用Array.prototype.forEach()和for ... of;
Array.prototype.find()(IE不兼容)
find() 方法返回数组中满足提供的测试函数的第一个元素的值。否则返回 undefined。
- 另请参见
findIndex()方法,它返回数组中找到的元素的索引,而不是其值。 find方法不会改变数组。返回值数组中第一个满足所提供测试函数的元素的值,否则返回undefined。
Array.prototype.filter()(IE9+)
filter() 方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素。
返回值一个新的、由通过测试的元素组成的数组,如果没有任何数组元素通过测试,则返回空数组。filter不会改变原数组,它返回过滤后的新数组。
小结
- 数组遍历不需要退出循环时使用
map()、forEach(); - 数组遍历需要生成新数组时使用
map(),不需要返回值时使用forEach(); - 数组遍历需要退出循环时使用
for、for...of/for ... in、find(); for...of及find()IE不兼容;- 对数组元素进行过滤时使用
filter();