DevUser
DevUser

Reputation: 31

get values in an object in object as array with es6

I'm pulling data from a service that loads into a dropdown and when a value is selected it's being assigned to a variable and an example is below

[{
    "id": 482,
    "firstName": "Micheal",
    "lastName": "Bamford",
    "email": "[email protected]",
    "areaCodes": [
        {
            "id": 60,
            "name": "New York",
            "status": "ACTIVE",
            "createdDate": "2018-10-30 14:09:28"
        },
        {
            "id": 12,
            "name": "Florida",
            "status": "ACTIVE",
            "createdDate": "2018-10-30 14:09:28"
        }
    ],

    "createdDate": "2019-01-03 12:29:33"
}]

What i'm trying to achieve is to only get the name property in the areaCodes objects like this ['New York', 'Florida']

Below is the code i'm using so far which only gets me only the first in the array

const selected = this.listFromAPI.filter(t => t.id === ev.id).map(r=> r.areaCodes[0].name);

Upvotes: 0

Views: 79

Answers (5)

Ashok Kumar
Ashok Kumar

Reputation: 326

Try with filter, reduce and map,

const listFromAPI = [
  {
    id: 482,
    firstName: "Micheal",
    lastName: "Bamford",
    email: "[email protected]",
    areaCodes: [
      {
        id: 60,
        name: "New York",
        status: "ACTIVE",
        createdDate: "2018-10-30 14:09:28",
      },
      {
        id: 12,
        name: "Florida",
        status: "ACTIVE",
        createdDate: "2018-10-30 14:09:28",
      },
    ],

    createdDate: "2019-01-03 12:29:33",
  },
];

// Value grabbed from drop down selector
const ev = {
  id: 482,
};

const result = listFromAPI
  .filter((t) => t.id === ev.id)
  .reduce((temp, currentVal) => {
    if (currentVal.areaCodes && Array.isArray(currentVal.areaCodes)) {
      currentVal.areaCodes.map((el) => {
        temp.push(el.name);
      });
    }

    return temp;
  }, []);

console.log(result);

Upvotes: 0

Yonas
Yonas

Reputation: 11

Try this one

const selected = this.listFromAPI.filter(t => t.id === ev.id).map(r => r.areaCodes.map(areaCode => areaCode.name));

Upvotes: -1

Hassan Imam
Hassan Imam

Reputation: 22534

You can use array#flatMap and array#map to extract name from areaCodes.

const data = [{ "id": 482, "firstName": "Micheal", "lastName": "Bamford", "email": "[email protected]", "areaCodes": [{ "id": 60, "name": "New York", "status": "ACTIVE", "createdDate": "2018-10-30 14:09:28" }, { "id": 12, "name": "Florida", "status": "ACTIVE", "createdDate": "2018-10-30 14:09:28" } ], "createdDate": "2019-01-03 12:29:33" }],
    result = data.flatMap(o => o.areaCodes.map(({name}) => name));
console.log(result);

Upvotes: 1

ikiK
ikiK

Reputation: 6532

And even shorter:

const obj = [{
    "id": 482,
    "firstName": "Micheal",
    "lastName": "Bamford",
    "email": "[email protected]",
    "areaCodes": [
        {
            "id": 60,
            "name": "New York",
            "status": "ACTIVE",
            "createdDate": "2018-10-30 14:09:28"
        },
        {
            "id": 12,
            "name": "Florida",
            "status": "ACTIVE",
            "createdDate": "2018-10-30 14:09:28"
        }
    ],

    "createdDate": "2019-01-03 12:29:33"
}]


const res = obj[0].areaCodes.map(i=>i.name);

console.log(res)

Upvotes: 0

0xdw
0xdw

Reputation: 3842

Is this what you are looking for?

const dataset = [{
  "id": 482,
  "firstName": "Micheal",
  "lastName": "Bamford",
  "email": "[email protected]",
  "areaCodes": [{
      "id": 60,
      "name": "New York",
      "status": "ACTIVE",
      "createdDate": "2018-10-30 14:09:28"
    },
    {
      "id": 12,
      "name": "Florida",
      "status": "ACTIVE",
      "createdDate": "2018-10-30 14:09:28"
    }
  ],

  "createdDate": "2019-01-03 12:29:33"
}];

for (const item of dataset) {
  const {
    areaCodes
  } = item;
  if (Array.isArray(areaCodes)) {
    const names = areaCodes.map(c => c.name);
    console.log(names);
  }
}

Upvotes: 1

Related Questions