我是Ramda的新手,有可能在同一对象级别中获得两个不同的键值吗?
我在下面添加了相同的代码:
在这里,列表对象包含用户和员工关键字,我试图实现同时获取用户和员工详细信息。
const R = require('ramda');
var list = [
{"doc":{"Title":"test1","Relations":{"users":[{"name": "user1"}]}}},
{"doc":{"Title":"test2","Relations":{"employee":[{"name": "user2"}]}}}
];
var getDetails= R.map(
R.pipe(
R.prop('doc'),
R.pipe(R.path(['Relations', 'users']))
)
)
getDetails(list);
在我的代码中,我仅使用用户密钥。可以同时获得用户和员工这两个密钥。
当前输出:
[[{"name": "user1"}], undefined]
期望的输出:
[[{"name": "user1"}], [{"name": "user2"}]]
答案 0 :(得分:2)
与现有解决方案相距不远。
这里可以提供帮助的其他一些功能是:
R.pick
-将对象转换为仅包含您提供的键(例如users
,employee
)。R.values
-Ramda的功能等效于Object.prototype.values
。R.chain
-这使您可以映射列表,然后展平嵌套列表。
const list = [
{"doc":{"Title":"test1","Relations":{"users":[{"name": "user1"}]}}},
{"doc":{"Title":"test2","Relations":{"employee":[{"name": "user2"}]}}}
]
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>
答案 1 :(得分:0)
您可以使用ifElse
和isNil
函数:
var getDetails= R.map(
R.pipe(
R.prop("doc"),
R.pipe(
R.ifElse(
R.pipe(R.path(["Relations", "users"]), R.isNil),
R.path(["Relations", "employee"]),
R.path(["Relations", "users"])
)
)
)
)