更新对象值Ramda [英] Update object value Ramda

查看:87
本文介绍了更新对象值Ramda的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在上一个问题中,我尝试按父ID对数组进行分组,然后将其从每个对象中删除-按父ID对对象进行数组分组Ramda .

In previous question I tried to group arrays by parent ids and then remove them from each object - Group arrays by parent ids object Ramda.

但是现在我有一个新问题.例如,我想更新ID为12的对象中的标题.

But now I have a new issue. For example I want to update title in object with id 12.

我的数据模型:

const stuff = {
  "31": [
    {
      "id": "11",
      "title": "ramda heeeelp"
    },
    {
      "id": "12",
      "title": "ramda 123"
    }
  ],
  "33": [
    {
      "id": "3",
      "title": "..."
    }
  ],
  "4321": [
    {
      "id": "1",
      "title": "hello world"
    }
  ]
}

尝试:

const alter = (id, key, value) => pipe(
  values,
  flatten,
  update(...) // <= end of my attempts
  // then group again
)

alter('12', 'title', 'new heading 123')(stuff)

推荐答案

您可以使用镜头此处:

  1. 上方: https://ramdajs.com/docs/#over
  2. 设置: https://ramdajs.com/docs/#set
  1. Over: https://ramdajs.com/docs/#over
  2. Set: https://ramdajs.com/docs/#set

const titleLens = R.curry((key, id, data) => R.lensPath([
  key, 
  R.findIndex(R.whereEq({ id }), R.propOr([], key, data)), 
  'title'
]));

// ----
const stuff = {
  "31": [
    {
      "id": "11",
      "title": "ramda heeeelp"
    },
    {
      "id": "12",
      "title": "ramda 123"
    }
  ],
  "33": [
    {
      "id": "3",
      "title": "..."
    }
  ],
  "4321": [
    {
      "id": "1",
      "title": "hello world"
    }
  ]
}

const title3111 = titleLens('31', '11', stuff);
const result = R.set(title3111, 'DID RAMDA HELP YOU?', stuff);

console.log('result', result);

<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js" integrity="sha256-xB25ljGZ7K2VXnq087unEnoVhvTosWWtqXB4tAtZmHU=" crossorigin="anonymous"></script>

这篇关于更新对象值Ramda的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆