Я извлекаю данные из службы, которая загружается в раскрывающийся список, и когда значение выбрано, оно присваивается переменной, и пример ниже

[{
    "id": 482,
    "firstName": "Micheal",
    "lastName": "Bamford",
    "email": "lalacifay@cliptik.net",
    "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"
}]

Я пытаюсь получить свойство name только в объектах areaCodes, подобных этому ['New York', 'Florida']

Ниже приведен код, который я использую до сих пор, который дает мне только первый в массиве

const selected = this.listFromAPI.filter(t => t.id === ev.id).map(r=> r.areaCodes[0].name);
0
DevUser 1 Июл 2021 в 19:33

5 ответов

Лучший ответ

И даже короче:

const obj = [{
    "id": 482,
    "firstName": "Micheal",
    "lastName": "Bamford",
    "email": "lalacifay@cliptik.net",
    "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)
0
ikiK 1 Июл 2021 в 16:41

Это то, что вы ищите?

const dataset = [{
  "id": 482,
  "firstName": "Micheal",
  "lastName": "Bamford",
  "email": "lalacifay@cliptik.net",
  "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);
  }
}
1
dinindu 1 Июл 2021 в 16:38

Вы можете использовать array#flatMap и array#map для извлечения name из areaCodes.

const data = [{ "id": 482, "firstName": "Micheal", "lastName": "Bamford", "email": "lalacifay@cliptik.net", "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);
1
Hassan Imam 1 Июл 2021 в 16:43

Попробуйте с filter, reduce и map,

const listFromAPI = [
  {
    id: 482,
    firstName: "Micheal",
    lastName: "Bamford",
    email: "lalacifay@cliptik.net",
    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);
0
Ashok Kumar 1 Июл 2021 в 19:28

Попробуй это

const selected = this.listFromAPI.filter(t => t.id === ev.id).map(r => r.areaCodes.map(areaCode => areaCode.name));
-1
Yonas 1 Июл 2021 в 16:48