javascrpit能够替代for循环的几种方法

使用数组方法替换 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 循环来作到这一点,它看起来像这样:code

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() 返回的是一个布尔值,它决定是否将该项保留在返回的新数组中。it

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 ,使用这种方法就不必了。使用适合自身状况的方法很是重要,以确保咱们不会过分使用。

相关文章
相关标签/搜索