Map和Reduce之间的主要区别

2024-01-27

我使用了这两种方法,但我对这两种方法的用法感到很困惑。

有什么吗map可以做但是reduce不可以,反之亦然?

注意:我知道如何使用这两种方法,我想知道这些方法之间的主要区别以及我们何时需要使用。


Source http://www.globalnerdy.com/2016/06/23/map-filter-and-reduce-explained-using-emoji/

Both map and reduce将数组和您定义的函数作为输入。它们在某种程度上是互补的:map无法为包含多个元素的数组返回一个元素,而reduce将始终返回您最终更改的累加器。

map

Using map您迭代元素,并为每个元素返回一个所需的元素。

例如,如果您有一个数字数组并想要获取它们的平方,您可以这样做:

// A function which calculates the square
const square = x => x * x

// Use `map` to get the square of each number
console.log([1, 2, 3, 4, 5].map(square))

reduce

使用数组作为输入,您可以根据回调函数(第一个参数)获取单个元素(比如说一个对象、数字或另一个数组),该函数获取accumulator and current_element参数:

const numbers = [1, 2, 3, 4, 5]

// Calculate the sum
console.log(numbers.reduce(function (acc, current) {
  return acc + current
}, 0)) // < Start with 0

// Calculate the product
console.log(numbers.reduce(function (acc, current) {
  return acc * current
}, 1)) // < Start with 1

当您可以用两者做同样的事情时,您应该选择哪一个?尝试想象一下代码的样子。对于提供的示例,您可以像您提到的那样计算平方数组,使用reduce:

// Using reduce
[1, 2, 3, 4, 5].reduce(function (acc, current) {
    acc.push(current*current);
    return acc;
 }, [])

 // Using map
 [1, 2, 3, 4, 5].map(x => x * x)

现在,看看这些,显然第二个实现看起来更好而且更短。通常您会选择更清洁的解决方案,在本例中是map。当然,你可以这样做reduce,但简而言之,想想哪个会更短,最终哪个会更好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Map和Reduce之间的主要区别 的相关文章

  • 将 Javascript 对象的属性从 string 更改为 int

    我有一个对象数组 每个对象具有三个属性 年份 总计 人均 例子 0 Object per capita 125 8 total 1007 2 year 2009 这些属性是字符串 我想创建一个循环来遍历数组并将它们转换为 int 我尝试了以
  • 如何阻止直接访问我的 JavaScript 文件?

    我使用 Minify 来缩小并缓存所有脚本请求 我只希望我的用户能够访问 JavaScript 文件的缩小版本 缩小位于www example com min我的脚本位于www example com scripts 如何阻止直接访问doc
  • 在特定页面上执行 javascript 的正确“Rails”方式

    我试图在特定页面上运行 javascript 而我唯一的解决方案似乎是反模式 我有controller js内部生成的assets javascripts 我在用着gem jquery turbolinks 我的代码类似于以下内容 docu
  • 在 Internet Explorer 中使用什么来监视 jscript 内存使用情况

    我们正在调试 GWT 应用程序 在 Firefox 中运行正常 在 IE6 0 中开始运行正常 但一段时间后 它就会崩溃并开始爬行 经过一些测试后 我们怀疑存在一些内存问题 使用了太多内存 内存泄漏等 除了使用taskmanager和pro
  • .push() 将多个对象放入 JavaScript 数组中返回“未定义”

    当我将项目添加到beats数组然后console log用户时 我得到了数组中正确的项目数 但是当我检查 length 时 我总是得到 1 尝试调用索引总是会给我 未定义 如下所示 Tom beats 1 我想我错过了一些明显的东西 但这让
  • Number.IsNaN() 比 isNaN() 更糟糕吗

    Soooooo isNaNJavaScript 显然被破坏了 比如 isNaN isNaN isNaN true isNaN false isNaN 0 返回 false 当它们看起来都是 不是数字 在 ECMAScript 6 中 草案包
  • 如何在网站上使用 svg 元素制作块的屏幕截图?

    我在网站上创建了一个构造函数 其本质是将所选元素及其颜色 svg中的元素 添加到访问者选择的背景和背景颜色 png中的背景 中 然后必须单击 保存 结果 按钮并仅执行工作区的屏幕截图 我写了这个脚本 但它需要屏幕截图 但只有背景 并忽略选定
  • 本地推送通知到在应用程序内运行 JS 代码的 Win8 Live Tile

    我正在尝试将更新发送到我的应用程序的磁贴 当应用程序运行时 这可以正常工作 例如 当用户单击按钮时 我可以轻松地将磁贴更新通知发送到磁贴 我无法解决的是当应用程序无法运行时如何更新磁贴 我找到的唯一选择是使用以下命令从远程 Web 服务器拉
  • IntersectionObserver是否支持水平滚动观察?

    我制作了几个垂直滚动 IntersectionObserver 模块 但我对水平滚动感兴趣 根将是 div 观察目标将是 img 我想观察当 img 放大但 div 保持视口宽度时的变化 我什至不确定移动 Safari 是否会将缩放后的图片
  • 导航栏下拉菜单(折叠)在 Bootstrap 5 中不起作用

    我在尝试使用以下命令创建响应式菜单或下拉按钮时遇到问题Bootstrap 5一切似乎都正常 导航图标和下拉图标出现 但它不起作用 当我单击nav图标或dropdown按钮 无dropdown menu apears 我想特别提到的是 我还包
  • 如何使用 Greasemonkey 监视静态 HTML 页面的更改?使用哈希?

    我希望我的 Greasemonkey 脚本仅在其访问的静态页面具有与以前完全相同的内容时运行 现在我可以设置一个包含该页面哈希的变量 我正在寻找一种动态散列页面的方法 以便我可以将我的散列与生成的散列进行比较 关于如何即时实现散列的任何想法
  • React Router v4 不渲染组件

    React Router v4 渲染组件存在问题 在应用程序初始加载时 它将呈现与 URL 相对应的正确组件 但是 任何后续的组件Link单击不会呈现所需的组件 图书馆 反应路由器 4 2 2 https reacttraining com
  • 如何使用 Javascript 设置查询字符串

    有没有办法使用 javascript 设置查询字符串的值 我的页面有一个过滤器列表 单击该列表时 它将更改右侧的页内结果窗格 我正在尝试更新 url 的查询字符串值 因此如果用户离开页面 然后单击 后退 按钮 他们将返回到最后一个过滤器选择
  • 改变 JavaScript 中的顶部填充

    以下是我在 css 中设置顶部填充的方法 body font size font size px margin 0 padding 100px 0 20px 0 width 100 important 如何使用最简单的 javascript
  • 使用javascript动态更新css内容

    需要将 css 更新为动态值 我不确定最好的方法是什么 div style zoom 1 div 缩放级别将根据窗口大小调整触发 应用程序将相应缩放 我将此应用程序加载到 cordova 中并让它在 iPAD 中运行 然后我意识到需要使用
  • 主页(网格)上的缩略图现在显得模糊。如何纠正?

    我不知道这看起来是否愚蠢 但从早上开始我就无法纠正这个突然出现在我的博客网站上的错误www candidopinions in http www candidopinions in 我有一个网格视图模板 其中博客文章中的特色图像作为调整大小
  • Python:计算字典的重复值

    我有一本字典如下 dictA unit1 test1 alpha unit1 test2 beta unit2 test1 alpha unit2 test2 gamma unit3 test1 delta unit3 test2 gamm
  • 使用 Enzyme 测试 `React.createRef` api

    我想测试下面的类 它使用React createRef api 不过 快速搜索并没有发现任何这样做的例子 有人成功过吗 我该如何嘲笑裁判 理想情况下我想使用shallow class Main extends React Component
  • Flot 库将 y 轴设置为最小值 0 和最大值 24

    如何将 y 轴设置在 0 到 24 的范围内 这是我的代码 j plot j placeholder d1 xaxis mode time min new Date 2010 11 01 getTime max new Date 2011
  • 改变字典的哈希函数

    按照此question https stackoverflow com questions 37100390 towards understanding dictionaries 我们知道两个不同的字典 dict 1 and dict 2例

随机推荐

  • 为什么 Nettle 2.4 的 `configure` 找不到 GMP 5.0.2?

    我正在尝试建立GnuTLS http www gnu org software gnutls 在 Mac OS X 10 5 Leopard 服务器上 是的 我知道 它有点过时 但这就是该服务器目前正在运行的 并且遇到了构建问题Nettle
  • AngularJS 中的 ng-app V/S data-ng-app

    在AngularJS中使用时ng app ng app在文档中找到的将用于定义根元素以作为应用程序自动引导 在某些应用程序中 它被用作data ng app 以下两个声明是否有任何区别 如果是 则什么 如果否 则哪一个是重要的 为什么 1
  • Java线程睡眠与中断异常

    为什么睡眠线程需要 try catch 来捕获中断异常 为什么睡眠甚至会发出中断异常错误 这是我在java编程中真正想了解的两个问题 我一直在通过谷歌搜索 但仍然没有找到明确的解释来解释为什么会发生这两件事 An InterruptedEx
  • 无符号负基元?

    在 C 中我们可以创建原语unsigned 但他们总是积极的 还有一种方法可以生成无符号负变量吗 我知道 无符号 这个词的意思是 没有符号 所以也不是减号 但我认为C 必须提供它 No unsigned只能包含非负数 如果您需要一个仅表示负
  • 如何获取机器的mac地址

    我想要获取机器的 MAC 地址 但是下面编写的代码仅在 Internet 连接到我的机器时显示 MAC 地址 其他它将返回 null 我使用的是 Windows 7 import java net InetAddress import ja
  • 替换 hive 中的空字符串 - Nvl 和 COALESCE 已尝试

    如何用其他值替换空字符串 长度 0 已使用Nvl and COALESCE但两者都不会替换为替换值 因为该值不为空 我可以用case语句 但寻找内置函数 如果有 因为你有空字符串所以当我们使用合并或 nvl仅当我们有空值在数据中 这些功能不
  • 4.0 和 2.0 应用程序之间的 Asp.Net 表单身份验证 SSO

    4 0 框架应用程序和 2 0 框架应用程序之间的单点登录似乎已被破坏 我有一个基于 asp net Framework 2 0 构建的旧应用程序和一个基于 asp net Framework 4 0 构建的新应用程序 我正在尝试在两者之间
  • VS2010图表控件:减少Y轴边距

    如何减小如下所示的左侧边距区域 标记为红色 的宽度 尝试这样的事情 Chart ChartAreas Chart ChartArea ObjectName InnerPlotPosition New System Windows Forms
  • 我可以暂时暂停 ORMLite 中自动生成的 ID 吗?

    我在我目前正在编写的一个小应用程序中使用 Android 和 ORMLite 该应用程序的目标是具有有效的导入 导出功能 为此我使用简单的 XML 框架 在某种程度上 一切都运转良好 情况如下 对象 A 包含引用对象 B 的外键 对象 B
  • 有没有办法从字符串创建 SyndicateFeed?

    我正在尝试从本地存储的 XML 数据重新创建 SyndicateFeed 对象 System ServiceModel Syndicate 如果我使用 XMLDocument 这会很容易 我会调用 LoadXml string Syndic
  • 任意长度的通用位向量类型

    出于与此处描述相同的原因 用户定义的未解释函数 https stackoverflow com questions 7740556 equivalent of define fun in z3 api 我想定义我自己的未解释函数 bvred
  • 如果下拉列表中的选择发生更改,则从工作表中删除数据

    跟进之前回答的问题 Excel VBA 基于一系列下拉列表运行宏 https stackoverflow com questions 40478350 excel vba run a macro based on a range of dr
  • 如何在不知道 setInterval() 和 setTimeOut() ID 的情况下清除它们?

    如果我不知道返回值setInterval or setTimeOut 我还能用吗clearInterveral id or clearTimeOut id 清除它们 Thanks 您可以替换原来的 setTimeout 和 setInter
  • Java - 访问控制允许来源多源域?

    所以我已经阅读了有关此问题的其他线程 但没有找到解决方案 我遇到的问题是因为我设置 access control allow methods true 我无法使用setHeader Access Control Allow Origin 我
  • C++11 成员初始化列表歧义

    由于此环境中的 GNU 标准库实现 我正在努力解决 c 11 符号解析中似乎存在歧义的问题 Arch Linux 4 2 5 1 x86 64 克 5 2 0 铿锵 3 7 0 Example include
  • 无法在 Angular JS 中使用 SmartTable 选择网格项

    我已经使用网格实现了智能表在 Angular JS 中 根据智能表文档 为了选择网格项 我们需要添加st select row row 我也加了这个 但我无法选择网格 实现的应用程序可以在 plunk 中看到 网址如下 任何人都可以帮我使用
  • 从 jQuery 调用 PHP 函数?

    我的网站上有一个 PHP 函数 需要几秒钟才能完成 这会保留整个页面 这是我不想要的 页面加载后是否可以使用 jquery 调用此 PHP 函数并将结果显示在 div 中 还要显示 ajax 加载器图像直到 PHP 函数完成 我一直在查看
  • hubris 无法安装:缺少 C 库:ruby、ruby、ruby

    我拼命尝试安装 Hubris 但每当我运行 cabal install 时安装就会失败 哈比斯链接 https github com mwotton Hubris tree master Haskell https github com m
  • Air for Android:设备警报后黑屏

    我确实有一个问题 而且没什么可继续的 我即将在三星应用商店上发布一个应用程序 使用 Air for Android As3 创建 并且刚刚得到了一份问题列表 在该应用程序经过三星工作人员测试后 才能发布该应用程序 我确实解决了几乎所有问题
  • Map和Reduce之间的主要区别

    我使用了这两种方法 但我对这两种方法的用法感到很困惑 有什么吗map可以做但是reduce不可以 反之亦然 注意 我知道如何使用这两种方法 我想知道这些方法之间的主要区别以及我们何时需要使用 Source http www globalne