0

I have some data from a collection named "service" which has data like this:

let service_data = [
  {
    "name":"Service 1",
    "price":60,
    "resource_group_ids" : 
         ["5d5e5dea99d9b75ff2f78dcd","5d5e85d329782914332368c8"]
  },
  {
    "name":"Service 2",
    "price":60,
    "resource_group_ids" : ["5d5e5dea99d9b75ff2f7cfe"]
  }
]

I want to push the resource_group_ids in a variable let say resource_groups. I don't want to loop resource_group_ids inside service_data.

0

4 Answers 4

3

You could use flatMap

const resource_groups = service_data.flatMap(o => o.resource_group_ids)

const service_data = [{"name":"Service 1","price":60,"resource_group_ids":["5d5e5dea99d9b75ff2f78dcd","5d5e85d329782914332368c8"]},{"name":"Service 2","price":60,"resource_group_ids":["5d5e5dea99d9b75ff2f7cfe"]}]

const resource_groups = service_data.flatMap(o => o.resource_group_ids)

console.log(resource_groups)

If flatMap is not supported, use concat and spread syntax to merge the 2D array returned by map

const resource_groups = [].concat(...service_data.map(o=> o.resource_group_ids))
Sign up to request clarification or add additional context in comments.

2 Comments

Note that flatMap only works in the node 12 release line.
@AyushGupta added an alternative
3

You can use flatMap

const extractFlat = (arr, key) => {
    return arr.flatMap(e => e[key]);
};

let service_data = [
  {
    "name":"Service 1",
    "price":60,
    "resource_group_ids" : 
         ["5d5e5dea99d9b75ff2f78dcd","5d5e85d329782914332368c8"]
  },
  {
    "name":"Service 2",
    "price":60,
    "resource_group_ids" : ["5d5e5dea99d9b75ff2f7cfe"]
  }
]

const resource_group_ids = extractFlat(service_data, 'resource_group_ids');
console.log(resource_group_ids);

or reduce on older environments

const extractFlat = (arr, key) => {
    return arr.reduce((acc, x) => acc.concat(x[key]), []);
};

3 Comments

Will this work in ie6? (squeezes eyes from curiosity)
Nothing works in ie6, but it's 2019 so that's not too big of a problem any more
@chrispbacon I am getting resource_groups : undefined on console.
0

You can achieve this with .map(), .join() and .split()

    const service_data = [
      {
        name: 'Service 1',
        price: 60,
        resource_group_ids:
          ['5d5e5dea99d9b75ff2f78dcd', '5d5e85d329782914332368c8']
      },
      {
        name: 'Service 2',
        price: 60,
        resource_group_ids: ['5d5e5dea99d9b75ff2f7cfe']
      },
    ];
    
    const result = service_data.map((r) => { return r.resource_group_ids; 
               }).join(',').split(',');
    console.log(result);

Comments

0

Using .reduce:

let service_data = [{
    "name": "Service 1",
    "price": 60,
    "resource_group_ids": ["5d5e5dea99d9b75ff2f78dcd", "5d5e85d329782914332368c8"]
  },
  {
    "name": "Service 2",
    "price": 60,
    "resource_group_ids": ["5d5e5dea99d9b75ff2f7cfe"]
  }
]

const resource_groups = service_data.reduce(function(result, item) {
  result.concat(item.resource_group_ids)
}, [])

console.log(resource_groups)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.