JavaScript 数组操作必须熟练运用的 10 个方法( 二 )

5. Array.forEach().forEach() 方法的工作方式很像常规的 for 循环,遍历一个数组并在每个元素上执行一个函数 。.forEach() 的第一个参数是回调函数,它包含循环数组的当前值和索引 。
如下:
articles.forEach((item, index) => {console.log(`文章索引 ${index} 的标题为《${item.title}》`);});输出结果如下:
文章索引 0 的标题为《如何在 Vue 的计算属性中传递参数》文章索引 1 的标题为《Angular数据状态管理框架:NgRx/Store》文章索引 2 的标题为《Angular管道PIPE介绍》

当需要简单地循环遍历数组的每个元素而不需要构建新数组时 。
6. for...offor...of 是es6推出的迭代器,号称最简洁,可以是用 break,continue和 return 终止循环 。跟 .forEach() 不同的是,不提供数组索引 。跟 for 语句相比代码少得多,更简洁 。
下面代码遍历输出数组,如下:
for (const item of articles) {console.log(item);}7. for...in这个方法跟上面的for...of 语法上看起来相似,for...of 是对值的遍历,for...in 是对 key/index 的遍历 。for...in 应用于数组则 key 对应的就是数组的索引值,应用于对象则 key 对应键值 。
来看代码执行效果,先应用于数组,如下:
for (const key in articles) {console.log(key);}上面代码输出的是数组的索引值:0、1、2,下面应用于数组第一个对象,如下:
for (const key in articles[0]) {console.log(key);}输出的就是:article_id、title、views 。
在实际开发中不提倡使用 for...in,如果需要遍历对象属性,推荐使用Object.keys  。
8. Array.every().every()方法将检查数组中的每个元素是否都通过提供的条件,如果数组中的所有元素都通过条件,则将返回 true ,如果没有,将返回 false 。
例如,检查 articles 数组所有的文章 views 都超过 1000,如下:
const isMoreThan1000 = articles.every((item) => item.views > 1000);console.log(isMoreThan1000);// true检查 articles 数组所有的文章 views 都超过 2000,如下:
const isMoreThan2000 = articles.every((item) => item.views > 2000);console.log(isMoreThan2000); // false
**什么时候使用 Array.every() ?**当需要确认数组的每一项都通过定义的条件时 。
9. Array.some().some() 方法和 .every() 方法类似,但验证的结果是相反的,如果数组中的所有元素只要有一个通过条件,则将返回 true ,如果所有的元素都不通过条件,将返回 false 。
.some() 方法和 .every() 方法在文章《7 个你应该掌握的 JavaScript 编码技巧》中介绍了如何实现逻辑 and 和 or  。
例如,检查 articles 数组所有的文章 views 是否有 views 超过 2000 的文章,如下:
const isMore2000 = articles.some((item) => item.views > 2000);console.log(isMore2000); // true检查 articles 数组所有的文章 是否有 views 超过 3000 的文章,如下:
const isMore3000 = articles.some((item) => item.views > 3000);console.log(isMore3000);// false10. Array.reduce()前面专门为此方法分享过一篇文章《javascript数组之includes、reduce》 。
.reduce() 方法接受一个回调函数作为其第一个参数,一个可选的初始值作为其第二个参数 。如果没有提供初始值,则使用第一个数组元素作为值 。回调函数提供一个累加器 accumulator 和 currentValue 参数,用于执行 reduce 计算 。
这里就简单举个例子,对 articles 数组的 views 进行累加求和:
const sumViews = articles.reduce((accumulator, current) => accumulator + current.views,0);console.log(sumViews); // 5084使用 .reduce() 方法可以用于展平一个数组,当然已经有很多方法可以做到这一点,这就是其中的方法之一 。
const flattened = [[0, 1],[2, 3],[4, 5],].reduce((accumulator, current) => accumulator.concat(current), []);console.log(flattened); // [ 0, 1, 2, 3, 4, 5 ]
当需要通过操作其值将数组向下转换为单个值时,可以使用 .reduce() 方法
总结JavaScript 提供了大量不同的处理数组的方法,本文介绍的8个在日常项目开发中使用频率比较高的数组处理方法,可以作为基础知识收藏 。


推荐阅读