【问题标题】:Node Ramda + find the object based on value节点 Ramda + 根据值查找对象
【发布时间】:2018-07-04 09:33:17
【问题描述】:

可以根据值获取对象吗?

在下面的示例 json 中,键名有 type,因此需要根据 type 值获取结果。

例如,如果 type='user' 则仅获取用户对象而不是员工对象的结果。

在这里我正在努力拥有两个键(用户和员工),您能否建议如何处理

var list =[
  {"doc":{"type":"user","Title":"test1","Relations":{"users":[{"name": "user1"},{"name": "user2"},{"name": "user3"}],"employee":[{"emp": "user2"}]}}},
  {"doc":{"type":"employee","Title":"test2","Relations":{"users":[{"name": "user1"}],"employee":[{"name": "emp1"},{"name": "emp2"},{"name": "emp3"}]}}}
];

const getDetails = R.chain(R.pipe(
  R.path(['doc', 'Relations']),
  R.pick(['users', 'employee']),
  R.values
))

const result = getDetails(list)

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

电流输出:

[[{"name": "user1"}, {"name": "user2"}, {"name": "user3"}], [{"emp": "user2"}], [{"name": "user1"}], [{"name": "emp1"}, {"name": "emp2"}, {"name": "emp3"}]]

预期输出:

[[{"name": "user1"}, {"name": "user2"}, {"name": "user3"}], [{"name": "emp1"}, {"name": "emp2"}, {"name": "emp3"}]]

【问题讨论】:

    标签: javascript node.js object npm ramda.js


    【解决方案1】:

    您可以利用R.cond 来基于一组谓词分支逻辑,例如在您的示例中type 是user 还是employee。

    使用这种方法,您需要将 R.chain 切换为 R.map 以匹配您的预期列表,除非您想要额外的数组扁平化。

    const list = [
      {"doc":{"type":"user","Title":"test1","Relations":{"users":[{"name": "user1"},{"name": "user2"},{"name": "user3"}],"employee":[{"emp": "user2"}]}}},
      {"doc":{"type":"employee","Title":"test2","Relations":{"users":[{"name": "user1"}],"employee":[{"name": "emp1"},{"name": "emp2"},{"name": "emp3"}]}}}
    ]
    
    const getDetails = R.map(R.pipe(
      R.prop('doc'),
      R.cond([
        [R.propEq('type', 'user'), R.path(['Relations', 'users'])],
        [R.propEq('type', 'employee'), R.path(['Relations', 'employee'])]
      ])
    ))
    
    const expected = [[{"name": "user1"}, {"name": "user2"}, {"name": "user3"}], [{"name": "emp1"}, {"name": "emp2"}, {"name": "emp3"}]]
    
    console.log(R.equals(expected, getDetails(list)))
    <script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.min.js"></script>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-30
      • 1970-01-01
      • 1970-01-01
      • 2013-11-26
      • 2020-02-29
      • 2021-01-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多