Как вернуть свойство объекта, если известно другое его свойство? - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть массив объектов с уникальными именами:

let arr = [
  {
    'name':'B',
    'id': 1
  },
  {
    'name': 'c',
    'id': 12
    },
  {
    'name': 'a',
    'id': 13
  }
]

Как я могу получить id, если я знаю name.Например, у меня есть B, и мне нужно вернуть 1?

Мое решение:

const foo = (arr, name) => arr.filter(el => el.name === name)[0].id

foo(arr, 'B') // 1

Надеюсь, есть лучшее решение этой проблемы

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Array.prototype.find подходит для нескольких поисков, если вы не возражаете, что это не поддерживается в IE, и что это может привести к ошибке, если элемент не найден.Для нескольких поисков я рекомендую сделать объект поиска:

const arr = [ { name:'B', id: 1 }, { name: 'c', id: 12 }, { name: 'a', id: 13 } ]

const obj = arr.reduce((o, v) => (o[v.name] = v.id, o), {})

console.log( obj['B'] )   // 1
console.log( obj['A'] )   // undefined

Если по каким-либо причинам данные получены из JSON.parse:

const obj = {}, json = '[{"name":"B","id":1},{"name":"c","id":12},{"name":"a","id":13}]'

JSON.parse(json, (k, v) => v.name ? (obj[v.name] = v.id) : v)

console.log( obj['B'] )   // 1
console.log( obj['A'] )   // undefined
0 голосов
/ 19 декабря 2018

Вы должны использовать Array.prototype.find() вместо Array.prototype.filter(), поскольку .find() возвращает только первый соответствующий элемент массива - .filter()возвращает все соответствующие элементы.Ваш код должен выглядеть следующим образом:

const foo = (arr, name) => arr.find(el => el.name == name).id;

Рабочий фрагмент:

let arr = [
  {
    'name': 'B',
    'id': 1
  },
  {
    'name': 'c',
    'id': 12
  },
  {
    'name': 'a',
    'id': 13
  }
]

const foo = (arr, name) => arr.find(el => el.name == name).id;

var theID = foo(arr, 'B');

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