javascript - 节点 Ramda + 根据值查找对象
问题描述
可以根据值获取对象吗?
在下面的示例 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"}]]
解决方案
您可以使用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>
推荐阅读
- php - 删除图像背景在 php imagick 中无法正常工作
- html - 从 Excel 公式进行 Google 搜索并将结果放入单元格中
- openedge - 访问过程库中的单例对象时访问冲突
- javascript - 在浏览器中调整 ImageData 大小的快速方法?
- javascript - 循环通过香草JS中的对象内部的对象
- reactjs - 使用 Typescript 导入 React-Select 失败
- acumatica - 如何将自定义 ZPL 标签从移动设备打印到连接到设备集线器的打印机?
- rabbitmq - RabbitMQ - “Not Before”过滤器
- swift - 检测在自定义 UITableCell 中按下了哪个按钮
- mysql - 如何选择最近 7 天可用 - MySql