使用 Ramda 镜头更改对象中的值属性

2024-03-13

我想知道如何使用 Ramda 镜头更改对象属性。

目前,我有一个深层状态:

buckets[
    blocks[
        messages[
            replies [
                {id: 0, text: 'text 0', value: 'simple value 0'},
                {id: 1, text: 'text 1', value: 'simple value 1'},
                {id: 2, text: 'text 2', value: 'simple value 2'},
                ...
            ]
        ]
    ]
]

我有一个基本的有效负载。我想获取属性和值,并通过我所在州的新值设置旧值,例如使用以下有效负载:

{文本:'new_text'} 或者 {值:'新值'}

在我的减速器中我有这个:

case SEQUENCES.UPDATE_REPLY_ON_BLOCK :
// payload => {text: 'new_text'}, or {value: 'new_value'}, or anyway...

let key = Object.keys(payload)[0];
let value = payload[key];

return R.over(
  R.lensPath(["buckets", 0, "blocks", 0, "messages", 0, "replies", 0, key]),
  R.set(value),
  state
);

我尝试使用合并:

return R.over(
    R.lensPath(["buckets", 0, "blocks", 0, "messages", 0, "replies", 0),
    R.merge(payload),
    state,
);

但结果相同:状态未修改,并且我没有错误。

也许可以通过 mergeDeepLeft 解决:

//payload => {value: 'new_value'}

return R.over(
    R.lensPath(["buckets", 0, "blocks", 0, "messages", 0, "replies", 0),
    R.mergeDeepLeft(payload),
    state,
);

你很接近了。问题是R.set https://ramdajs.com/docs/#set and R.over https://ramdajs.com/docs/#over用于两个不同的任务。你不需要over这里。相反,你的外部函数应该是set第二个参数是您想要将镜头设置为的值:

const payload = {text: 'new_text'}
const key = Object.keys(payload)[0];
const value = payload[key];

const state = {buckets: [{blocks: [{messages: [{replies: [{id: 0, text: 'text 0', value: 'simple value 0'}, {id: 1, text: 'text 1', value: 'simple value 1'}, {id: 2, text: 'text 2', value: 'simple value 2'}]}]}]}]}

console.log(
    R.set(
        R.lensPath(['buckets', 0, 'blocks', 0, 'messages', 0, 'replies', 0, key]),
        value,
        state,
    )
)
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js"></script>

You use over当您想根据已有的值调整它时,将函数从旧值传递到新值作为第二个参数。例如,R.over(myLens, R.toUpper, obj):

const payload = {text: 'new_text'}
const key = Object.keys(payload)[0];
const value = payload[key];

const state = {buckets: [{blocks: [{messages: [{replies: [{id: 0, text: 'text 0', value: 'simple value 0'}, {id: 1, text: 'text 1', value: 'simple value 1'}, {id: 2, text: 'text 2', value: 'simple value 2'}]}]}]}]}

console.log(
    R.over(
        R.lensPath(['buckets', 0, 'blocks', 0, 'messages', 0, 'replies', 0, key]),
        R.toUpper,
        state,
    )
)
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js"></script>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Ramda 镜头更改对象中的值属性 的相关文章

  • Crypto-Js 库的 hmac-256 脚本返回函数结构而不是 Google Apps 脚本中的值,在外部工作正常吗?

    我正在设置一个谷歌电子表格项目来连接到我的 CryptoExchange API 但是当涉及到这个简单的 CryptoJs Hmac sha256 脚本时 它不起作用 它返回函数结构而不是值 而在外部它工作正常 看我的jsfiddle ht
  • 我可以动态创建/销毁 Vue 组件吗?

    因此 我正在创建一个相当复杂的 Vue 应用程序 它从后端 API 获取数据并将其显示在前端 具体取决于用户选择的过滤器 它的默认设置是立即显示所有内容 然后一旦用户选择过滤器 它就会拉出不具有这些属性的 卡片 组件 直到今天 一切都很顺利
  • JavaScript - 无需布尔值即可运行一次

    有没有办法只运行一段JavaScript代码ONCE 而不使用布尔标志变量来记住它是否已经运行过 具体来说not就像是 var alreadyRan false function runOnce if alreadyRan return a
  • 您可以将现有的 div 复制到模式对话框吗

    我有一个带有多个面板的仪表板来显示不同的信息 我希望能够添加一个按钮来以模式显示面板 我正在使用引导程序 我所能找到的只是已经编写的模态 我想复制作为面板的 div 标签的内容 然后将其显示在模型中 但我不确定如何进行 该面板的 html
  • 在动态创建的元素上添加事件监听器[重复]

    这个问题在这里已经有答案了 是否可以向所有动态生成的元素添加事件侦听器 Javascript 我不是页面的所有者 因此我无法以静态方式添加侦听器 对于页面加载时创建的所有元素 我使用 doc body addEventListener cl
  • React 在同一组件中渲染多个模态

    我对 React 和一般编码都很陌生 我试图在同一组件中渲染多个模态 但它们都是同时渲染的 因此看起来所有链接都在最后一个模态中渲染文本 这是状态设置的地方 class Header extends React Component cons
  • ReactJS - Redux Form - 如何根据单选字段元素有条件地显示/隐藏元素?

    我对 Redux 比较陌生 我有一个表单 其中有一些无线电输入 是 或 否 基本上 我想根据该无线电输入选择有条件地显示包含另一个 redux 表单字段的另一个元素 有直接的方法可以做到这一点吗 我想检查一下formProps site v
  • Cosmos DB Mongo API 如何管理“请求率很大”情况

    我有以下代码 async function bulkInsert db collectionName documents try const cosmosResults await db collection collectionName
  • window.open:是否可以打开一个新窗口并修改其 DOM

    我想打开一个新窗口 var my window open iframe html blank height 600 width 600 但当我打开它时 我想修改它的DOM 我尝试过 var div my document createEle
  • 为什么我们使用 SpreadsheetApp.flush()?

    我的理解是 flush https developers google com apps script reference spreadsheet spreadsheet app flush有助于在功能发生时执行这些功能 而无需将它们捆绑在
  • “|”是什么意思(单管道)在 JavaScript 中做什么?

    console log 0 5 0 0 console log 1 0 1 console log 1 0 1 为什么0 5 0返回零 但任何整数 包括负数 都返回输入整数 单管道 有什么作用 这是一个按位或 https developer
  • 将 onclick 事件应用于页面加载时不存在的元素

    我将列表样式设置为看起来像选择框 并且当用户单击列表中的元素时我想触发一个函数 但是该元素是通过加载的AJAX因此 当页面加载并且我无法绑定时不存在onclick事件到它onDomReady 如果我把它作为一个普通的选择列表 我可以只标记一
  • 如何使用Create React App安装React

    嗨 我对反应真的很陌生 我不知道如何实际安装它 也不知道我需要做什么才能在其中编写代码 我下载了node js并且安装了v12 18 3以及NPM 6 14 6 但是每次我尝试在许多网站上提到的create react app安装方法中输入
  • 弹出窗口的动态高度取决于内容,可能吗?

    是否有可能获得一个宽度始终为 400px 的弹出窗口 但根据弹出窗口中的内容动态高度 我已经看到了这个 但不知道如何将其应用到弹出窗口 调整 iframe 的宽度高度以适应其中的内容 https stackoverflow com ques
  • 使用 AJAX 和 JQuery 按设定的时间间隔刷新 Rails 部分

    I have a page in my rails application that looks like 现在 我有另一个用 python 编码的人工智能应用程序 它处理视频 显示在 Rails 应用程序页面的左侧 并使用捕获的车辆及其相
  • Javascript 中 if 语句中的假值?

    过去两周 我在学校研究 JavaScript 的事情已经有一段时间了 而且我一直在做我的作业 在 Douglas Crockford 所著的 JavaScript The Good Parts 一书中 作者在第 11 页上列出了 if 语句
  • 在方法内部执行方法

    我目前正在 FreeCodeCamp 中进行 JavaScript 练习 我的代码应该使用的测试用例之一是函数调用 如下所示 addTogether 2 3 这是我得到的基本功能 function addTogether return 当我
  • 搜索多维数组 JavaScript

    我有一个如下所示的数组 selected products 0 r1 7up 61 Albertsons selected products 1 r3 Arrowhead 78 Arrowhead selected products 2 r
  • p5 向量减法“sub”返回错误

    我一直在尝试将 p5 草图上传到 React 构建中 使用react p5 wrapper 我能够成功在屏幕上渲染画布 但是 某些矢量函数会导致错误 var distance this position dist ball position
  • 如何获得 JavaScript 阶乘程序的循环来显示所使用的工作?

    你好 我面临着用 JavaScript 编写一个程序的挑战 尽管我对它不太了解 但它要求用户输入一个数字 然后计算该数字的阶乘 我使用了已经提出的问题并设法使计算正常工作 但无法获得所需的输出 我必须在以下输出中获取它 而不使用任何花哨的库

随机推荐

  • React Native 后台计时器永远不会停止

    我正在构建一个应用程序 它有一个计时器 可以在计时器处于活动状态时请求地理位置 对于我正在使用的计时器反应本机背景计时器 https github com ocetnik react native background timer 这是可行
  • 调用 sp_rename 时使用变量

    我尝试制作一个存储过程 它将 删除主键 重命名设置主键的列名 创建新的主键 我正在努力解决第 2 点 我正在尝试将列重命名为sp rename将参数传递给存储过程 如下所示 EXEC sp rename SCHEMA TABLE ID Id
  • 为什么我运行 python manage.py runserver 时有两个进程

    wenzhixue 80384 0 4 1 1 2464788 22584 s001 S 10 37AM 0 01 06 usr bin python manage py runserver 0 0 0 0 8000 wenzhixue 8
  • 如何处理大量浮点数据?

    我们有一个二进制文件 其中包含大量float数据 约80MB 我们需要在 Java 应用程序中处理它 数据来自医疗扫描仪 一个文件包含来自一个文件的数据Rotation One Rotation包含 960Views One View包含
  • 为构建器配置 lombok

    我想避免多个构造函数 所以我想使用建造者设计模式 https en wikipedia org wiki Builder pattern 通过使用lombok https projectlombok org setup maven图书馆 它
  • Tensorflow tf.data.Dataset.cache似乎没有达到预期的效果

    我正在尝试按照以下方法提高我的模型训练性能使用 tf data API 获得更好的性能 https www tensorflow org guide data performance指导方针 然而 我观察到使用的性能 cache 如果与没有
  • 将键、值对添加到新字典中

    我当前的字典中有一个现有的键 值对列表 称为total list 我想检查我的列表 看看每个的长度是否Key 1 in total list 我想将该键及其值对添加到新字典中 这是我想出的代码 total list 104370544 31
  • 导入 SMOTE 引发 AttributeError:模块“sklearn.metrics._dist_metrics”没有属性“DistanceMetric32”

    Running from imblearn over sampling import SMOTE会引发以下错误 AttributeError Traceback most recent call last d A OneDrive UBC
  • ggplot:向现有分组箱线图添加新数据

    我用 ggplot2 创建了一个分组箱线图 现在我想通过以下方式向现有绘图添加附加数据 我每个月都有one 最佳 值应显示为点 并且这些点应通过线连接 这是期望的状态 我如何将这些点和线添加到我的绘图中 我可以将连接线放在箱线图后面吗 这是
  • IIS SSL 错误“ssl_error_rx_record_too_long”

    我使用以下 SSL 命令创建了一个证书 makecert r pe n CN www yourserver com b 01 01 2000 e 01 01 2036 eku 1 3 6 1 5 5 7 3 1 ss my sr local
  • 我在哪里可以了解“shell:”URI?

    我刚刚意识到有一个shell URI 但每个搜索引擎似乎都认为shell and shell是同一件事 我唯一发现的是你可以输入shell startup直接在资源管理器中 XP 和 7 测试过 可以看到明显的效果 这已经很好了 因为没有
  • 强制 JTable 在仍处于编辑模式时将数据“提交”到模型

    我有一个 JTable 如下 因此 当 JTable 仍处于编辑模式时 在 Dividend 列处有键盘光标闪烁 直接单击 确定 不会将数据提交到表模型中 单击 确定 仅关闭对话框 我需要明确按 ENTER 键 以便将数据提交到表模型中 当
  • SNMP:创建自定义 OID

    我需要自定义 OID 来监控我的一些软件状态 但我就是不明白 如何在Windows XP系统中创建自定义OID 如 1 3 6 1 4 1 30891 100 103 我需要其中一些人在那里写一些信息并在需要时阅读它 但我不知道如何在系统中
  • Java/LWJGL:OpenGL 中的 Z 轴表现得像左手坐标系

    最近 我寻求帮助 https stackoverflow com q 18836484 1530508关于 OpenGL 中的 3D 相机旋转 这个答案 https stackoverflow com a 18836618 1530508接
  • PyTorch:如何使用 DataLoaders 自定义数据集

    如何利用torch utils data Dataset and torch utils data DataLoader根据您自己的数据 不仅仅是torchvision datasets 有没有办法使用内置的DataLoaders他们使用的
  • 我可以使用 *.tlb 文件而不使用 Regasm 在计算机上注册它吗

    我们正在支持老化的 VB6 系统 我们已在 Net 中为其编写了新代码 将代码放入程序集中 然后导出 tlb 文件以与 VB6 代码库一起使用 我的问题是 在我希望运行代码的每台计算机上 我是否必须使用 Regasm 来注册类型库 我之所以
  • WCF 最大消息大小配额

    我正在尝试调用 WCF 服务 托管在 Windows 服务中 而不是 IIS 但收到以下错误 最大消息大小配额 传入消息已超出 对于远程通道 请参阅 服务器日志以获取更多详细信息 我尝试将 MaxReceivedMessageSize 和
  • 有序 logit R polr 的聚类标准误差 - 估计中删除的值

    我对 R 很陌生 并且习惯了非常基本的应用程序 现在我遇到了一个问题需要帮助 我正在寻找一种方法聚类标准误 for an 有序逻辑回归 my estimation is similar to this https stats idre uc
  • app.component.css 中的 CSS 样式未应用于选项卡正文内容

    你能告诉我为什么这里没有应用填充 即使我在 app component css 文件中将 padding top 设置为 20px 如果我在 styles css 文件中设置它 它将起作用 不知道为什么当我将 css 属性移动到 app c
  • 使用 Ramda 镜头更改对象中的值属性

    我想知道如何使用 Ramda 镜头更改对象属性 目前 我有一个深层状态 buckets blocks messages replies id 0 text text 0 value simple value 0 id 1 text text