- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 Ramda.js(和镜头),我想修改下面的 JavaScript 对象,将 ID=“/1/B/i”的对象的“NAME:VERSION1”更改为“NAME:VERSION2”。
我想使用镜头,因为我只想更改一个深度嵌套的值,否则保持整个结构不变。
我不想使用 lensIndex 因为我永远不知道数组的顺序是什么,所以相反,我想通过查找它的“id”字段来“找到”数组中的对象。
我可以用镜片做到这一点,还是应该用不同的方式做到这一点?
{
"id": "/1",
"groups": [
{
"id": "/1/A",
"apps": [
{
"id": "/1/A/i",
"more nested data skipped to simplify the example": {}
}
]
},
{
"id": "/1/B",
"apps": [
{ "id": "/1/B/n", "container": {} },
{
"id": "/1/B/i",
"container": {
"docker": {
"image": "NAME:VERSION1",
"otherStuff": {}
}
}
}
]
}
]
}
最佳答案
这应该可以通过创建一个通过 ID 匹配对象的镜头来实现,然后可以与其他镜头组合以深入到图像场。
首先,我们可以创建一个镜头,它将专注于与某个谓词匹配的数组元素(注意:只有保证匹配列表中的至少一个元素,这才是有效的镜头)
//:: (a -> Boolean) -> Lens [a] a
const lensMatching = pred => (toF => entities => {
const index = R.findIndex(pred, entities);
return R.map(entity => R.update(index, entity, entities),
toF(entities[index]));
});
R.lens
。以节省查找与谓词匹配的项目的索引的重复。
//:: String -> Lens [{ id: String }] { id: String }
const lensById = R.compose(lensMatching, R.propEq('id'))
const imageLens = R.compose(
R.lensProp('groups'),
lensById('/1/B'),
R.lensProp('apps'),
lensById('/1/B/i'),
R.lensPath(['container', 'docker', 'image'])
)
data
像这样的对象:
set(imageLens, 'NAME:VERSION2', data)
const vLens = R.lens(
R.compose(R.nth(1), R.split(':')),
(version, str) => R.replace(/:.*/, ':' + version, str)
)
set(vLens, 'v2', 'NAME:v1') // 'NAME:v2'
imageLens
的组合中。以整个对象中的版本为目标。
const verLens = compose(imageLens, vLens);
set(verLens, 'VERSION2', data);
关于javascript - lambda js : lens for deeply nested objects with nested arrays of objects,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35538351/
我正在使用分形 ( fractal.thephpleague.com ) 通过 Laravel ( laravel.com ) 开发 API。顺便说一句,这是一个了不起的图书馆。 在某些网络服务中,我
当滚动java代码时,我总是坚持recommended convention的. 。通常,这是非常可靠的,可以防止任何命名冲突的问题。但是,当您处理“深度子域”组织时 - 例如 cisb.justic
看到这个错误: enum MyError: ErrorType { case Foo case Bar } func couldThrow(string: String) throws
在我作为工程师(不是软件)的工作中,有时我必须用 Python 编程。按照教程,我了解了字典以及它们如何用于存储数据,它们的速度很快等等。 我嵌套的字典可以达到 7 级,如下所示: mydict['l
昨天,一个好人帮我建了一个PredicateBuilder对于 Linq to Entities here . 似乎工作正常,但是完整的查询生成了这个可怕的 70 000 行长的东西 here (太长
我想知道是否有人可以使用这样的东西: @resources 'projects', -> @resources 'tables', -> @resources 'items'
在 Ionic 中,我正在尝试自定义 但我遇到了 css 中的切换选择问题。我有 2 当我在 css 中设计它们时,它们都是定制的:这是正确的。如果我想给两种不同的习惯,问题就来了!我还没有找到一种方
我认为这是一个一般的 ruby 问题,尽管在我的例子中涉及的对象是 ActiveRecord 模型。 如果我有一个模型可以嵌套在另一个模型中,我如何确定模型的嵌套深度? 即: Model Root
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
尝试从中提取消息文本: HelloI have a very interesting observation on nature of birds in Al
我写了一个函数,当给定一个对象列表和一个id,返回相同的列表,但相应的对象标记为事件(所有其他对象不应处于事件状态)。 const list = [ { id: 1, active: fal
我定义了这个结构: struct s_molecule { std::string res_name; std::vector my_particles; std::vector my_b
如果我想在我的 C++ 代码中拥有以下连接,那么声明头文件的最佳方式是什么,以免出现 'include nested too deep 错误'? 在我的边缘类中,我有一些需要返回 Node 对象的函数
我有两个模型加入了 has_many :through 关系: class Publication :publication_contributors end class Contributor
我有一个包含多个嵌套列的 DataFrame。该模式不是静态的,可能会在我的 Spark 应用程序的上游发生变化。模式演化保证始终向后兼容。下面粘贴了一个匿名的、缩短版本的架构 root |-- i
我有如下 API 响应: [ { "id": 1, "instance_id": 1400, "entity_uuid": 21,
我们将 Entity Framework 更新到 6.1.3,从那时起在一些服务器上(不幸的是那些运行单元测试的服务器),我们现在得到异常: System.Data.SqlClient.SqlExce
我正在使用 Rails 4.2.1 和 active_model_serializers 0.10.0.rc2 我是 API 新手并选择了 active_model_serializers,因为它似乎
我正在寻找 Rails 3.1 的工作教程,它向您展示如何创建一个 3 层深的嵌套模型。 "complex forms" screencasts在 RailsCasts 上似乎不起作用,因为代码已经有
我面临着如何构建组件的决定,我想知道社区是否对最佳实践有任何想法。 1:封装组件以隐藏细节。 所有者渲染: 列表渲染: 项目渲染: ... 在此版本中,组件的可重用性不太好,因为它们了解很多域详细
我是一名优秀的程序员,十分优秀!