使用 Ramda 在循环中从多个数组中取出前 X 个总项目

2024-01-30

我有一个数组数组,想编写一个返回顶部的函数x项目数,通过按顺序从每个数组中获取项目。

这是我所追求的一个例子:

    const input = [
      ["1a", "2a", "3a", "4a", "5a"],
      ["1b", "2b", "3b", "4b", "5b"],
      ["1c", "2c", "3c", "4c", "5c"],
      ["1d", "2d", "3d", "4d", "5d"]
    ];

    const takeRoundRobin = count => arr => {
      // implementation here
    };

    const actual = takeRoundRobin(5)(input);

    const expected = [
      "1a", "1b", "1c", "1d", "2a"
    ];

我看到了一个 Scala 问题的建议,它使用以下方法解决了这个问题zip但在 Ramda 中你只能传递 2 个列表来进行 zip 压缩。


在这里,拉姆达transpose https://ramdajs.com/docs/#transpose可以成为你的基地。添加一团unnest https://ramdajs.com/docs/#unnest, 一点点take https://ramdajs.com/docs/#take,你会得到这个:

const {take, unnest, transpose} = R

const takeRoundRobin = (n) => (vals) => take(n, unnest(transpose(vals)))

const input = [
  ['1a', '2a', '3a', '4a', '5a'],
  ['1b', '2b', '3b', '4b', '5b'],
  ['1c', '2c', '3c', '4c', '5c'],
  ['1d', '2d', '3d', '4d', '5d']
]

console.log(takeRoundRobin(5)(input))
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.js"></script>

另请注意,这可以处理不同长度的数组:


如果您希望能够回到开头并继续获取值,您可以替换take with a recursiveTake像这样:

const {take, unnest, transpose, concat } = R

//recursive take
const recursiveTake = (n) => (vals) => {
  const recur = (n,vals,result) =>
    (n<=0)
      ? result
      : recur(n-vals.length,vals,result.concat(take(n,vals)))
  return recur(n,vals,[]);
};

const takeRoundRobin = (n) => (vals) => 
  recursiveTake(n)(unnest(transpose(vals)));

const input = [
  ['1a', '2a', '3a', '4a'],
  ['1b'],
  ['1c', '2c', '3c', '4c', '5c'],
  ['1d', '2d']
]

console.log(takeRoundRobin(14)(input))
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.js"></script>

该函数的另一个版本(没有显式递归)如下所示:

const takeCyclic = (n) => (vals) => take(
  n,
  unnest(times(always(vals), Math.ceil(n / (vals.length || 1))))
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Ramda 在循环中从多个数组中取出前 X 个总项目 的相关文章

  • 如何制作像Stackoverflow一样的可折叠评论框

    我正在构建一个网站 并且有一个状态更新列表 我希望允许用户为列表中的每个项目撰写评论 但是我正在尝试实现一个类似于堆栈溢出工作方式的用户界面 特别是可折叠的评论表单 列表 用户在其中单击对列表中的特定状态更新添加评论 并且在列表中的该项目下
  • 如何在CKEditor 5中监听焦点事件

    我想听一下 CKEditor 5 中的焦点事件 我认为这样的事情会起作用 但回调从未被调用 document querySelector editable ClassicEditor create el then editor gt edi
  • 如何将字节数组转换为图像 [kotlin]

    我想将字节数组转换为图像并在图像视图中显示它 但不知道该怎么做 有人可以指导我吗 我使用这个函数将位图转换为字节数组 private fun BitmapToByteArray ByteArray val stream ByteArrayO
  • React延迟加载/无限滚动解决方案

    我花了一段时间才弄清楚如何使用优秀的延迟加载图像React Lazyload 组件 https github com jasonslyvia react lazyload 演示在滚动时延迟加载图像 但在测试时我无法获得相同的行为 罪魁祸首是
  • 未捕获类型错误:无法解析模块说明符“fs”。相对引用必须以“/”、“./”或“../”开头

    当我尝试在我自己的模块中导入 fs 模块时 例如import as fs from fs 浏览器控制台出现以下错误 Uncaught TypeError Failed to resolve module specifier fs Relat
  • 执行数组内的函数

    是否可以从数组内部执行匿名函数 也在数组内部定义 return execute function logic 或者我应该在外面定义它然后再调用它 从技术上讲 您可以将该函数括在括号中并像这样调用它 return function retur
  • Chrome 扩展程序中的后台脚本到底何时运行?

    在我的 chrome 扩展中 我有一个后台脚本 它将使用XMLHttpRequest note that this code is in the global scope i e outside of any function also n
  • 为什么“dtoa.c”包含这么多代码?

    我将是第一个承认我对低级编程的整体知识有点稀疏的人 我理解许多核心概念 但我不经常使用它们 话虽这么说 我对需要多少代码感到非常惊讶dtoa c http www netlib org fp dtoa c 在过去的几个月里 我一直致力于用
  • History.replaceState 仍然向“浏览历史记录”添加条目

    具体来说 调用以下代码片段 history replaceState undefined undefined value 正确地不会影响当前页面的后退按钮行为 但是will在 浏览历史记录 页面添加一个条目 这是我不想要的 下图是 Chro
  • java - IBM-IEEE 双精度浮点字节转换

    我需要在 Java 中对字节数组进行 IBM IEEE 浮点转换 我能够使用成功地进行单精度浮点字节的转换http www thecodingforums com threads c code for converting ibm 370
  • 如何向尚未添加到页面的元素注册 Javascript 事件处理程序

    我正在尝试构建一个greasemonkey 脚本 它将根据用户与其他动态创建的数据表的交互动态创建数据表 我的问题是 每次创建表时 我都必须进行两次传递 一次用于创建表 另一次用于获取表中我想要添加事件处理程序的所有对象 通过 id 并添加
  • Relay 中的嵌套片段数据始终相同

    我是 Relay 新手 并且遇到了片段上嵌套数据的问题 当我在 graphiql 中进行测试时 以下查询返回正确的数据 因此我确信我的架构是正确的 viewer customers name billing address city 但是
  • 禁用任何类型的浏览器窗口滚动?

    有没有办法禁用滚动 不仅仅是滚动条 还有浏览器窗口的全部功能 根据您对 Keit 的回答 您不想在打开灯箱时滚动处于活动状态 如果是这种情况 您可以使用以下 css 在打开灯箱的同时向正文添加一个类 这个解决方案的好处是它保留了滚动 空间
  • Web浏览器控件:如何捕获文档事件?

    我正在使用 WPF 的 WebBrowser 控件加载一个简单的网页 在这个页面上我有一个锚点或一个按钮 我想在我的应用程序后面的代码中 即在 C 中 捕获该按钮的单击事件 WebBrowser 控件是否有办法捕获加载页面元素上的单击事件
  • 如何为 ng-repeat orderBy 创建回调?

    寻找一种方法让 AngularJS 的 ng repeat orderBy 过滤器在完成渲染后执行回调 Markup div table thead tr th Name th th Age th tr thead tbody tr tr
  • nvd3.js - 无法更改折线图中线条的颜色

    我正在尝试更改 nvd3 折线图不同线条的颜色here http nvd3 org livecode index html codemirrorNav但我无法理解该怎么做 我想将示例中的 2 条线的颜色更改为绿色和青色 我试过 nv add
  • 响应式菜单:悬停子菜单显示错误

    简而言之 我根据教程创建了一个响应式菜单 当您将鼠标悬停在投资组合按钮上时 菜单应该显示子菜单 而在移动模式下 您需要按该按钮才能显示子菜单 效果很好 问题是该教程有一个错误 如果您在桌面模式下按组合按钮 子菜单将不会再次显示 除非您按 单
  • 地址更改时如何停止 Angular 重新加载

    我正在使用 Angular 的scrollTo and anchorScroll像这样 app controller TestCtrl function scope location anchorScroll scope scrollTo
  • jQuery fadeOut 一个 div,fadeIn 另一个 div 在其位置

    我正在尝试一个简单的 jQuery 脚本来淡出一个 div 并淡入另一个 div 但由于某种原因 第一个 div 永远不会淡出 这可能是代码的一个明显问题 但我似乎无法弄清楚 div div div div
  • 我可以防止将 Leaflet 地图平移到世界边缘之外吗?

    有没有办法限制平移到世界边缘之外 在这幅画中 棕色是世界 灰色是虚空 我想让它不可能像这样平移 Leaflet 允许您控制地图抵抗被拖出边界的程度maxBoundsViscosity选项 值 0 到 1 将其设置为最大值会完全禁用拖动出界

随机推荐

  • 如何在 React 中呈现未定义状态的数据?

    我正在 componentDidMount 内获取数据 但在初始渲染期间我未定义 然后再次渲染发生 并且在此期间状态变量被填充 现在 当它不是未定义的并且在填充之后 我想对其进行解构并在我的组件内显示数据 注意 getProjectDeta
  • C++ 中的变量作用域?

    在 C 中 main 中声明的任何变量都可以在整个 main 中使用 对吗 我的意思是 如果变量是在 try 循环中声明的 它们仍然可以在整个 main 中访问吗 因为我在 main 的 try 循环中声明了几个变量 但是如果我在 try
  • 如何获取字典中键的ReadOnlyCollection

    我的课程包含一个Dictionary
  • python time.strftime %z 始终为零而不是时区偏移

    gt gt gt import time gt gt gt t 1440935442 gt gt gt time strftime Y m d H M S z time gmtime t 2015 08 30 11 50 42 0000 g
  • 按实体名称和上次修改日期搜索

    我在 RavenDb 中存储了许多命令 它们都实现了 ICommand 我希望能够搜索上次修改的元数据和 Raven Entity Name 我目前正在对每个命令进行多重映射 如下所示 public class CommandAuditSe
  • 将 PHP 日期范围转换为 MYSQL 单个日期

    我有一个可用性日历 其中我当前正在逐个添加日期 并使用 mysql 查询来确定是否存在具有特定日期的行 并将当天的类别更改为 已预订 红色 我想在我的表单中输入一个范围 并通过 php 或 mysql 将其处理为多个单独的日期 我的日期格式
  • 使用 TensorFlow Dataset API 和 flat_map 的并行线程

    我正在将 TensorFlow 代码从旧的队列接口更改为新的数据集API https www tensorflow org api docs python tf data Dataset 使用旧界面我可以指定num threads论证tf
  • Powershell 检查本地管理员凭据

    我正在尝试运行一个需要管理员输入才能处理某些事情的脚本 我不想让脚本运行失败 而是尝试捕获错误并将其扔回到凭据中 但我找不到可以将本地管理凭据传递给陷阱的命令 有人有什么可能有用的东西吗 我发现很多都会检查域凭据 但这是一个本地管理员帐户
  • Java Swing:显示 JPopupMenu 后插入符侦听器停止触发

    我正在制作一个文本编辑器应用程序 并且遇到了一个问题 在显示 JPopupMenu 后键入或粘贴文本时 我的 CaretListener 不会被触发 我已将 CaretListener 添加到 JTextArea textArea addC
  • 如何为 Next.js API 请求进行 HTTP 代理

    我在网上尝试了很多方法 但到目前为止没有任何效果 第一次尝试 src pages api proxy slug js import createProxyMiddleware from http proxy middleware Creat
  • CommonServiceLocator 的评论中的“环境”一词的含义是什么?

    我想猜测 环境容器 与它是静态类这一事实有关 但这只是一个猜测 或者这是指标准模式 也就是说 我真的需要从头到尾读完 GoF 的书 namespace Microsoft Practices ServiceLocation
  • 为什么 cmpsb 似乎不比较寄存器的值?

    我正在尝试以 16 位实模式编写 DOS 克隆 尽管一旦我完成了当前问题 我可能只会学习 32 位汇编 我的问题过去一直受到负面回应 但这是最后一次 恐怕我确实需要咨询这个网站 改进我之前的问题 我付出了更多努力来了解有关汇编代码中的指针和
  • 如何使用 ffmpeg 降低多个 JPEG 图像文件的质量?

    我想降低当时一堆图像的质量 和 q v x其中 x 是 1 到 30 之间的数字 数字越大 质量越差 即使使用 我也能节省很多空间x 1 现在 当涉及到处理多个文件时 我陷入了困境 我尝试过这两个批处理文件 mkdir processed
  • 获取 Facebook 公共页面评级和评论

    我不是某些页面的所有者 但我想访问页面评论和评级 每次访问时我都会得到空数据集 gt http https graph facebook com 102227700571 tabs reviews access token fb oauth
  • 在 PowerPoint 中从编辑模式下的按钮调用宏

    我正在尝试编写一个可以在 PowerPoint 2007 2010 的编辑模式下调用的 vba 宏 我可以轻松地将命令按钮添加到演示文稿中 但是 只能在幻灯片模式下单击此按钮来触发 vba 宏 但是 我想做的是让此按钮在编辑模式下触发关联的
  • 如何在 Grails 上使用 LDAP 插件?

    我正在开始一个关于 Groovy 和 Grails 的新项目 我现在正在处理身份验证部分 因为我们有一个 LDAP 服务器 所以我想使用 LDAP 进行身份验证 我开始设置我的环境 我正在使用 SpringSource Tool Suite
  • JSP编译期间出现'tmpFile.renameTo(classFile)'的原因

    我正在使用 Jetty 6 服务器 有时会出现此异常 java io IOException tmpFile renameTo classFile failed at org apache jasper compiler SmapUtil
  • 如何知道应用程序是由调试器 (Visual Studio) C# 启动的

    在我的 C 代码中 我想知道应用程序是否已由调试器 在我的例子中为 VisualStudio 启动 有谁知道如何获取这些信息 TIA 系统 诊断 调试器 IsAttached http msdn2 microsoft com en us l
  • CakePHP2 中的多态关联

    我有3个模型 Page Course and Content Page and Course包含元数据和Content包含 HTML 内容 Page and Course两者都有很多Content Content属于Page and Cou
  • 使用 Ramda 在循环中从多个数组中取出前 X 个总项目

    我有一个数组数组 想编写一个返回顶部的函数x项目数 通过按顺序从每个数组中获取项目 这是我所追求的一个例子 const input 1a 2a 3a 4a 5a 1b 2b 3b 4b 5b 1c 2c 3c 4c 5c 1d 2d 3d