JavaScript 的 map
、reduce
和 filter
方法是处理数组的强大工具,能以简洁的代码实现复杂操作。让我们深入了解如何有效利用这些方法。
Array.map()
Array.map()
方法根据提供的转换函数更新数组中的每个值,并返回一个相同大小的新数组。它接受一个回调函数作为参数,用于应用转换。
let newArray = oldArray.map((value, index, array) => { // ...转换逻辑... });
记忆技巧:MAP:逐个修改数组元素 (Morph Array Piece-by-Piece)。
map()
方法适用于需要保留所有元素但需修改其值的情况,不同于 filter()
方法(可能删除元素)或 reduce()
方法(计算单个结果)。map()
方法允许你逐个修改数组元素。示例:
[1, 4, 6, 14, 32, 78].map(val => val * 10) // 结果:[10, 40, 60, 140, 320, 780]
上述示例中,我们将原始数组 [1, 4, 6, 14, 32, 78]
中的每个值乘以 10。结果是一个新数组,其每个值都是原始数组对应值的转换结果:[10, 40, 60, 140, 320, 780]
。
Array.filter()
Array.filter()
方法用于从数组中筛选出满足特定条件的元素,并返回一个包含这些元素的新数组。
它就像一个搜索过滤器,只保留满足条件的元素。
例如,如果我们有一个数值数组,想要筛选出大于 10 的值,可以这样写:
[1, 4, 6, 14, 32, 78].filter(val => val > 10) // 结果:[14, 32, 78]
如果使用 map()
方法,则会返回与原始数组长度相同的新数组,其中每个元素是根据条件转换的结果(true 或 false)。例如:
[1, 4, 6, 14, 32, 78].map(val => val > 10) // 结果:[false, false, false, true, true, true]
而 filter()
方法只返回值为 true
的元素。因此,结果数组的长度可能小于或等于原始数组的长度。
记忆技巧:filter()
方法就像一个过滤器,一些元素会通过,一些会被过滤掉。
假设有一组四只狗参加了服从训练课程,它们都面临一些挑战,并参加了期末考试。我们可以用一个对象数组来表示这些狗:
const students = [ { name: "Boops", finalGrade: 80 }, { name: "Kitten", finalGrade: 45 }, { name: "Taco", finalGrade: 100 }, { name: "Lucy", finalGrade: 60 } ];
如果狗狗的期末考试成绩高于 70 分,则获得证书;否则需要重修课程。为了知道需要打印多少张证书,我们需要编写一个方法来返回及格的狗狗。我们可以使用 filter()
方法简化代码:
const passingDogs = students.filter(student => student.finalGrade >= 70); /* passingDogs = [ { name: "Boops", finalGrade: 80 }, { name: "Taco", finalGrade: 100 } ]; */
Boops 和 Taco 通过了考试,将获得证书!
Array.reduce()
reduce()
方法将数组中的所有值缩减为单个值。它接受一个回调函数,该函数包含累加器(累积数组中每个元素的值)、当前值和索引。它还可以接受一个初始值作为第二个参数:
let finalVal = oldArray.reduce((accumulator, currentValue, currentIndex, array) => { // ...累积逻辑... }, initialValue);
让我们创建一个烹饪函数和一个配料列表:
// 配料列表 const ingredients = ['wine', 'tomato', 'onion', 'mushroom']; // 烹饪函数 const cook = (ingredient) => `cooked ${ingredient}`;
如果要将这些配料制作成酱汁,可以使用 reduce()
方法:
const wineReduction = ingredients.reduce((sauce, item) => { return sauce = cook(item) ', '; }, ''); // wineReduction = "cooked wine, cooked tomato, cooked onion, cooked mushroom, "
初始值(此处为 '')很重要,如果没有它,第一个元素将不会被处理。
为了避免末尾多余的空格,我们可以使用索引和数组来应用转换:
const wineReduction = ingredients.reduce((sauce, item, index, array) => { sauce = cook(item); if (index <p>记忆技巧:<code>reduce()</code> 方法就像制作酱汁一样,将多个配料减少成一个单一结果。</p>
以上是插图(和音乐)指南的映射,减少和过滤数组方法的详细内容。更多信息请关注PHP中文网其他相关文章!

在这篇文章中,布莱克·莫里(Blackle Mori)向您展示了一些骇客,同时试图推动同位HTML支持的极限。如果您敢于使用这些,以免您也被标记为CSS罪犯。

具有CSS的自定义光标很棒,但是我们可以将JavaScript提升到一个新的水平。使用JavaScript,我们可以在光标状态之间过渡,将动态文本放置在光标中,应用复杂的动画并应用过滤器。

互动CSS动画和元素相互启动的元素在2025年似乎更合理。虽然不需要在CSS中实施乒乓球,但CSS的灵活性和力量的增加,可以怀疑Lee&Aver Lee&Aver Lee有一天将是一场

有关利用CSS背景滤波器属性来样式用户界面的提示和技巧。您将学习如何在多个元素之间进行背景过滤器,并将它们与其他CSS图形效果集成在一起以创建精心设计的设计。

好吧,事实证明,SVG的内置动画功能从未按计划进行弃用。当然,CSS和JavaScript具有承载负载的能力,但是很高兴知道Smil并没有像以前那样死在水中

是的,让#039;跳上文字包装:Safari Technology Preview In Pretty Landing!但是请注意,它与在铬浏览器中的工作方式不同。

此CSS-tricks更新了,重点介绍了年鉴,最近的播客出现,新的CSS计数器指南以及增加了几位新作者,这些新作者贡献了有价值的内容。

在大多数情况下,人们展示了@Apply的@Apply功能,其中包括Tailwind的单个property实用程序之一(会改变单个CSS声明)。当以这种方式展示时,@Apply听起来似乎很有希望。如此明显


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

Dreamweaver Mac版
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具