摘要:使用数组方法替换循环的示例以及扩展方法。与不同的是,返回的是一个布尔值,它决定是否将该项保留在返回的新数组中。它们具有相同的参数,并且它们的回调函数需要返回一个布尔值来确定该项是否满足条件。
使用数组方法替换 for 循环的示例(以及扩展 forEach() 方法)。
使用 map() 修改数据
如果我们想对数组中的每一项执行操作并生成包含结果项的新数组,那么 map()是一个很好的选择。map() 方法可用于任何数组,并具有三个参数 - 数组中的当前项,索引(可选)和原始数组(可选)。在回调函数中,我们可以返回我们想要组成 map() 函数返回的新数组的任何值。
const newArray = myArray.map((current, index, array) => { // return item for newArray })
让我们以下面的文章数组为例,每个文章都有一个 title 和 rating 属性:
const articles = [ { title: "你可能不需要循环", rating: 4 }, ... ];
假设我们想要创建一个新数组,每篇文章都被评为5星。我们可以使用一个基本for 循环来做到这一点,它看起来像这样:
const amazingArticles = []; for (let i = 0; i < articles.length; i++) { const newArticle = Object.assign(articles[i], {rating: 5}); amazingArticles.push(newArticle); }
虽然这会产生我们想要的结果,但是通过使用该 .map() 方法可以更好地实现此逻辑 。
const amazingArticles = articles.map((article) => { return Object.assign(article, {rating: 5}); });
使用 filter() 过滤数据
有时,我们想确定数组中的项目是否满足特定条件。我们可以用 filter() 方法做到这点。filter() 方法和 map() 类似,共有三个参数 - 数组中的当前项,索引(可选)和原始数组(可选)。与map() 不同的是,filter() 返回的是一个布尔值,它决定是否将该项保留在返回的新数组中。
const newArray = myArray.filter((current, index, array) => { // return true or false });
让我们以前面的文章数组为例。如果我们想获得数组中评级为3及以上的所有文章怎么办?同样,我们可以使用 for 循环来完成此操作,但 filter() 方法更合适。
const highlyRatedArticles = articles.filter((article) => { return article.rating >= 3; });
用 every() 和 some() 进行条件测试
通过 filter() 方法,我们可以确定数组中的哪些项满足特定条件。但有时,我们不需要知道哪些项满足或不满足条件,我们可能只需要知道所有或任何项是否满足条件。这是 every() 和 some() 方法发挥作用的地方。every() 和 some() 的方法运作非常相似 filter() 的方法。它们具有相同的参数,并且它们的回调函数需要返回一个布尔值来确定该项是否满足条件。
const every = myArray.every((current, index, array) => { // return true or false }); const some = myArray.some((current, index, array) => { // return true or false });
这些方法之间的关键区别在于 filter() 方法本身返回的内容,即在上面的示例中, every 和 some 变量的值是真假值 。every() 方法返回 true 的条件是数组中的 每个项 均满足所述条件。如果有一个项目不满足条件,它将返回 false 。另一方面,some()返回 true 的条件是如果数组中 至少一个 项满足条件。
是否使用 for 循环
正如我前面提到的,循环是很多情况下都适合的一个很好的工具,并且这些新方法的存在并不意味着根本不应该使用循环。我认为这些方法很棒,当我们使用 filter() 方法而不是 for 循环时,乍看之下更容易理解逻辑的目的是什么。但是,这些方法具有非常严格的限制,如果不使用它们的全部值,则可能会过度使用。这方面的一个例子是 map() 方法,它在理论上可用于替换几乎任何循环。如果在我们的第一个例子中,我们只想修改原始 articles 数组而不是创建一个新的修改过的 amazingArticles ,使用这种方法就没必要了。使用适合自身情况的方法非常重要,以确保我们不会过度使用。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/100353.html
摘要:虽然和都可以获取组件实例,但是它们无法在跨级或兄弟间通信,这是它们的缺点。也就是在父组件中提供一个值,并且在需要使用的子孙组件中注入改值,即不仅仅是,只要是的子组件,无论隔多少代,都可以通过这个的方式注入。通过混入组件,实现组件间的通信。 写在前面 vue 的组件化应该是其最核心的思想了,无论是一个大的页面还是一个小的按钮,都可以被称之为组件。基于 Vue 的开发,就是在写一个个组件,...
阅读 1528·2021-09-22 15:52
阅读 3437·2021-09-22 14:59
阅读 2790·2021-09-02 15:12
阅读 928·2021-08-20 09:35
阅读 1545·2019-08-30 14:09
阅读 2689·2019-08-30 13:56
阅读 1559·2019-08-26 18:27
阅读 3345·2019-08-26 13:37