I'm trying to convert an array of objects into an array of integers extracting values from those objects using Ramda.js. I need to keep just the node participants with the uid values, however, it seems that I'm not doing this correctly.
I'm want to transform this
var listObejcts = {
"participants": [
{
"entity": {
"uid": 1
}
},
{
"entity": {
"uid": 2
}
}
]
}
to this:
{
"participants": [1, 2]
}
I've tried the code above but it didn't work. It's still returning a list of objects.
var transform = pipe(
over(lensProp('participants'), pipe(
filter(pipe(
over(lensProp('entity'), prop('uid'))
))
))
)
console.log(transform(listObejcts))
Does anybody know how I could achieve that?
It's possible to edit the code here - https://repl.it/repls/PrimaryMushyBlogs
One possibility is to combine evolve
with map
( path
) like this:
const transform = evolve({participants: map(path(['entity', 'uid']))}) var listObjects = {participants: [{entity: {uid: 1}}, {entity: {uid: 2}}]} console.log(transform(listObjects))
<script src="https://bundle.run/ramda@0.26.1"></script><script> const {evolve, map, path} = ramda </script>
While I'm sure that there is a lens-based solution, this version looks pretty straightforward.
A lens
-based solution is certainly possible. Here is one such:
var transform = over( lensProp('participants'), map(view(lensPath(['entity', 'uid']))) ) var listObjects = {participants: [{entity: {uid: 1}}, {entity: {uid: 2}}]} console.log(transform(listObjects))
<script src="https://bundle.run/ramda@0.26.1"></script><script> const {over, lensProp, map, view, lensPath} = ramda </script>
也可以只使用纯JavaScript es6:
const uidArray = listObjects.participants.map(({ entity: { uid } }) => uid);
Well, you can do it in Ramda, but you can simply use VanillaJS™ for that and have a fast, one-line, library-free solution:
const obj = { participants: [ {entity: {uid: 1}}, {entity: {uid: 2}} ] } obj.participants = obj.participants.map(p => p.entity.uid); console.log(obj);
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.