Array数组遍历小结

419 阅读4分钟

Array数组遍历

Array.prototype.map()(IE9+)

map() 方法创建一个新数组,其结果是该数组中的每个元素是调用一次提供的函数后的返回值。

  1. 当你不打算使用返回的新数组却使用map是违背设计初衷的,请用forEach或者for-of替代;
  2. 你不该使用map: A)你不打算使用返回的新数组,或/且 B) 你没有从回调函数中返回值;
  3. map 不修改调用它的原数组本身(当然可以在 callback 执行时改变原数组);
  4. 返回值 一个由原数组每个元素执行回调函数的结果组成的新数组。

Array.prototype.forEach()(IE9+)

forEach() 方法对数组的每个元素执行一次给定的函数。

  1. forEach() 方法按升序为数组中含有效值的每一项执行一次 callback 函数,那些已删除或者未初始化的项将被跳过(例如在稀疏数组上)

  2. forEach() 被调用时,不会改变原数组,也就是调用它的数组(尽管 callback 函数在被调用时可能会改变原数组)

  3. 除了抛出异常以外,没有办法中止或跳出 forEach() 循环

  4. 若你需要提前终止循环,你可以使用:

  5. 这些数组方法则可以对数组元素判断,以便确定是否需要继续遍历:

  6. 译者注:只要条件允许,也可以使用 filter() 提前过滤出需要遍历的部分,再用 forEach() 处理。

  7. 返回值 undefined

for(IE3+)

  1. for 语句用于创建一个循环,它包含了三个可选的表达式,这三个表达式被包围在圆括号之中,使用分号分隔,后跟一个用于在循环中执行的语句(通常是一个块语句)。
  2. for 语句头部圆括号中的所有三个表达式都是可选的。
  3. 你当然可以忽略所有的表达式。同样的,确保使用了 break 语句来跳出循环并且还要修改(增加)一个变量,使得 break 语句的条件在某个时候是真的。

for...of(IE不兼容)

for...of语句可迭代对象(包括 ArrayMapSetStringTypedArrayarguments 对象等等)上创建一个迭代循环,调用自定义迭代钩子,并为每个不同属性的值执行语句

  1. 对于for...of的循环,可以由breakthrow  continue   或return终止。在这些情况下,迭代器关闭。
  2. for...offor...in的区别
    • 无论是for...in还是for...of语句都是迭代一些东西。它们之间的主要区别在于它们的迭代方式。
    • for...in 语句以任意顺序迭代对象的可枚举属性
    • for...of 语句遍历可迭代对象定义要迭代的数据。

for...in(IE6+)

for...in语句以任意顺序遍历一个对象的除Symbol以外的可枚举属性。

  1. 提示: for...in不应该用于迭代一个关注索引顺序的 Array
  2. for ... in是为遍历对象属性而构建的,不建议与数组一起使用,数组可以用Array.prototype.forEach()for ... of;

Array.prototype.find()(IE不兼容)

find() 方法返回数组中满足提供的测试函数的第一个元素的值。否则返回 undefined

  1. 另请参见  findIndex() 方法,它返回数组中找到的元素的索引,而不是其值。
  2. find方法不会改变数组。
  3. 返回值 数组中第一个满足所提供测试函数的元素的值,否则返回 undefined

Array.prototype.filter()(IE9+)

filter() 方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素。

  1. 返回值 一个新的、由通过测试的元素组成的数组,如果没有任何数组元素通过测试,则返回空数组。
  2. filter 不会改变原数组,它返回过滤后的新数组。

小结

  1. 数组遍历不需要退出循环时使用map()forEach() ;
  2. 数组遍历需要生成新数组时使用map(),不需要返回值时使用forEach()
  3. 数组遍历需要退出循环时使用forfor...of/for ... infind()
  4. for...offind()IE不兼容;
  5. 对数组元素进行过滤时使用filter()