ReactJS / JavaScript найти массив в объекте - PullRequest
2 голосов
/ 09 февраля 2020

У меня есть строка value и объект obj, я хочу преобразовать value в array, затем найти его в obj по значению и получить name, но он возвращает undefined, что Я пропустил?

let value = '3,4';
let obj = {
  "DistrictData": [{
    "id": 3,
    "name": 'blah'
  }, {
    "id": 4,
    "name": 'oops'
  }]
}

let res = value.split(',').map((v, i) => obj.DistrictData.find(o => o.id === v))
console.log(res)

Ответы [ 3 ]

3 голосов
/ 10 февраля 2020

Вам нужно найти с числовым значением, потому что split возвращает массив строк. Затем сопоставьте имя.

let value = '3,4',
    obj = { DistrictData: [{ id: 3, name: 'blah' }, { id: 4, name: 'oops' }] },
    res = value
        .split(',')
        .map((v, i) => obj.DistrictData.find(o => o.id === +v))
        .map(o => o.name);

console.log(res);
1 голос
/ 10 февраля 2020

Массив split содержит строковое значение, и в рамках поиска вы сравниваете строку с числом, поэтому либо преобразуйте строку в число, либо используйте ==, чтобы игнорировать тип проверки. И, наконец, получить свойство name от объекта.

let value = '3,4';
let obj = {
  "DistrictData": [{
    "id": 3,
    "name": 'blah'
  }, {
    "id": 4,
    "name": 'oops'
  }]
}

let res = value.split(',').map((v, i) => (bj.DistrictData.find(o => o.id == v).name)
console.log(res)

См .: Какой оператор равенства (== vs ===) следует использовать в JavaScript сравнениях?

0 голосов
/ 10 февраля 2020

Вы можете нормализовать массив

, чтобы он понравился

  let obj = { "DistrictData": {"3":{ "id": 3,"name": 'blah'}, "4":{"id": 4,"name": 'oops'}}

, тогда вы можете фильтровать по имени

normalizr

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...