有没有办法在现代浏览器中用 javascript 替换这个 lodash _.chain 代码?

2023-12-23

我有这个使用 lodash _.chain 的代码。我想简化代码,不使用 lodash 并以另一种方式执行此操作。

examObjectives = _.chain(objectives)
   .where({ 'examId': exam })
   .uniq(true, 'id')
   .map(function (s): any { return { id: s.id, text: s.text, numberAndText: s.numberAndText }; })
   .value();

有人可以给我一些建议,告诉我如何消除对 lodash、_.chain 的依赖,并编写代码,从而最大限度地利用新浏览器中现在可以找到的可用 JavaScript 函数。注意我想使用built in过滤器和映射函数,并且不使用任何外部函数来创建 examObjectives。

我希望有人能提出一些想法。我对 javascript 不太熟悉,所以欢迎有机会学习。


我把一些东西放在一起,代码如下所示:

objectives.filter(function (x) {
    return x.examId == exam;
}).reduce(function (accumulator, current) {
    if (!accumulator.some(function (x) { return x.id == current.id; })) {
        accumulator.push(current);
    }
    return accumulator;
}, []).map(function (x) {
    return {
        id: x.id,
        text: x.text,
        numberAndtext: x.numberAndText
    }
});

(“唯一符”的灵感来自https://stackoverflow.com/a/17903018/2022183 https://stackoverflow.com/a/17903018/2022183).

您可以通过使用如下函数提取属性与常量值的比较来缩短此代码:

function propertyEqualTo(prop, val) {
    return function (x) {
        return x[prop] == val;
    };
}

你的代码将显示为:

return objectives.filter(propertyEqualTo('examId', exam)).reduce(function (accumulator, current) {
    if (!accumulator.some(propertyEqualTo('id', current.id)) {
        accumulator.push(current);
    }
...

您确定您需要uniq()无论如何都打电话到这里吗?您正在匹配一个id从一开始就应该是独一无二的。如果您能够删除此调用,您的代码应该非常短。

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

有没有办法在现代浏览器中用 javascript 替换这个 lodash _.chain 代码? 的相关文章

随机推荐

  • 如何比较 postgres 策略中行的旧值和新值以进行更新

    我有一个权限结构 因此特定权限仅允许编辑表中 5 个字段中的 2 个 我的整个系统中有 RLS 因此我需要在策略内执行上述操作 起初 我想到编写一个函数来检查用户是否更新了他们没有更新权限的字段 并在策略中使用它的返回值 但我找不到一种无需
  • 从文件中删除由具有特定关键字的白线分隔的一组行

    我有一个包含如下行的文件 如果一组行中的任何行包含关键字 SEDS2 TOP 我想从文件中删除一组行 每组行由空行分隔 0 00 600 00 2214 28 785 71 1 00000 SEDS1 BOTTOM 0 00 600 00
  • 固定长度的Javascript画布曲线

    我想绘制任何 随机 曲线 给定 起点 终点 曲线长度 我怎么能做这样的事情受限于画布边界 加上曲线不能交叉 我试图找到一些解决方案 但我无法弄清楚 谢谢你的时间 这是我想要完成的更详细的视图 这是在画布上绘制的二次曲线 一切安好 问题是 如
  • MVC3 的当前上下文中不存在名称“model”

    我在项目中添加了一个cshtml页面 当我尝试向其中添加以下声明时 出现错误 当前上下文中不存在名称 模型 model xyz abc SomeClass 我检查了参考文献 所有这些都已就位 我在视图文件夹中添加了 web config 但
  • 如何修复错误“正在更新 Maven 项目”。不支持 IClasspathEntry kind=4?

    我已经在 STS 中导入了 Maven 项目 当我运行更新更新项目时 我收到 Updating Maven Project Unsupported IClasspathEntry kind 4 有解决方法吗 此问题已在 m2e 1 5 0
  • 使用 pyodbc 将参数传递给 sql 查询失败

    我已经阅读了数十篇类似的文章并尝试了所有方法 但在尝试使用 pyodbc 将参数传递给简单查询时仍然收到错误消息 如果其他地方有答案但我找不到它 我们深表歉意 我有一个非常简单的表 select from Test yields a b c
  • 错误:“在包含外部引用的聚合表达式中指定了多个列。”

    我在尝试执行下面的查询时收到此错误 有什么想法或建议吗 Error 在包含外部引用的聚合表达式中指定多个列 如果正在聚合的表达式包含外部引用 则该外部引用必须是表达式中引用的唯一列 SELECT TestInstances pkTestIn
  • 为什么 JSLint 抱怨:“someFunction() 在定义之前就被使用了”?

    搜索 JSLint 错误 在定义之前使用 我发现了这些 JSLint 在定义错误之前使用函数 https stackoverflow com questions 806163 jslint using a function before i
  • 为什么网站为 url 生成随机字母数字字符串而不是使用行 ID?

    为什么许多网站 youtube 就是一个很好的例子 生成随机数字和字母的字符串 而不是使用行 ID 等 通常是这样的 bla v wli4l73Chc0 而不是喜欢 bla id 83934 如果你有很多行 只是为了保持简短吗 或者这还有其
  • Mac 上的 EWS 请求未响应并出现错误

    在我们的 Outlook 加载项中 我们使用makeEwsRequestAsync获取当前电子邮件MimeContent 我们了解通过 JavaScript API 使用 EWS 时存在 1MB 请求 响应限制 当我们在 Windows 上
  • 统计excel中某个月份的所有记录

    我有一张按日期组织的 Excel 培训表 我正在尝试制作每月统计报告 因此 我想通过Excel公式统计统计列标题中指定的月份内完成的培训次数 标题具有数字格式的月份 培训表中的日期采用 01 23 2015 格式 例如 如果统计列的标题为
  • sql server 自动每日表分区

    我需要重新设计一个包含每日日志且有数亿行的表 其概念是仅将数据保留一个月 该表将每天进行分区 使用日期时间字段作为分区键 例如 3 月份我需要 31 个文件组和 31 个分区 一旦进入 4 月 该过程将必须插入 4 月 1 日的分区并删除
  • 通过 SQL 根据日期合并(串联)行

    我有下表 Animal Vaccine Date Vaccine Dog 1 1 2016 x Dog 2 1 2016 y Dog 2 1 2016 z Cat 2 1 2016 y Cat 2 1 2016 z 我希望能够将同一动物和同
  • PHP 条件赋值

    在 Symfony 核心中发现一段有趣的代码 if host route gt getHost 的优先级高于 但它在逻辑上是如何工作的呢 第一部分很清楚 但其余部分呢 我创建了一个小样本 但仍然不清楚 sample http sandbox
  • 如何保存从 imagecreatefromstring() 函数创建的图像?

    这是我的代码 data iVBORw0KGgoAAAANSUhEUgAAABwAAAASCAMAAAB 2U7WAAAABl BMVEUAAAD l2Z dAAAASUlEQVR4XqWQUQoAIAxC2 0vXZDr EX4IJTRkb
  • 需要帮助改进 java 客户端端口侦听器

    我有一小段代码在包含 SWING 控件的小程序中运行 用于将信息写入某个端口上的套接字 然后侦听响应 这工作得很好 但是有一个问题 端口侦听器本质上处于循环状态 直到服务器接收到 null 我希望用户在等待服务器响应时能够在小程序实例化的
  • 是否有一个 ASP.NET 可数据绑定控件(如 Repeater),只需要一个项目?

    我正在尝试在 Web 表单上显示业务对象的大量属性 我当然可以创建大量标签并在代码隐藏中分配所有值 但我觉得必须有一种不太冗长的方法 我想要的是类似 asp Panel 的东西 但你可以在其中指定数据源 面板似乎不支持任何类型的数据绑定 我
  • jstl c out in a href

    我应该如何写行 a href a gt Profile 正确吗 它应该给我类似个人资料的东西 我的背景
  • VS Code 调试器到达第一个断点的速度极慢

    我在 Windows 10 上使用 VS Code 来调试 Python 和 React 调试器到达第一个断点的速度非常慢 对于bothPython 和 JS Chrome 我观察到的操作顺序是 VS Code 的程序选项卡立即亮起 The
  • 有没有办法在现代浏览器中用 javascript 替换这个 lodash _.chain 代码?

    我有这个使用 lodash chain 的代码 我想简化代码 不使用 lodash 并以另一种方式执行此操作 examObjectives chain objectives where examId exam uniq true id ma