简体   繁体   中英

How to convert an array of objects in an array of integers extracting values from those objects using ramda.js?

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.

Update

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM