получить значение из массива объектов на основе значения атрибута - PullRequest
0 голосов
/ 21 марта 2019

У меня есть массив объектов следующим образом:

   Identifiers: [
     {
     Identifier: {
      Source: "TEST",
      Symbol: "123456",
     }
    },
     {
      Identifier: {
       Source: "TEST2",
       Symbol: "345678"
      }
    },
    {
      Identifier: {
       Source: "TEST3",
       Symbol: "456789"
     }
   ]

Мне нужно извлечь значение символьного ключа для источника: "TEST3" из массива.У меня есть доступ только к TEST3.Каков был бы лучший способ получить val

Ответы [ 2 ]

3 голосов
/ 21 марта 2019

Вы можете использовать find и destruct Identifier объект, возвращаемый так:

let input = [{Identifier:{Source:"TEST",Symbol:"123456",}},{Identifier:{Source:"TEST2",Symbol:"345678"}},{Identifier:{Source:"TEST3",Symbol:"456789"}}]
   
let { Identifier: { Symbol } } = input.find(a => a.Identifier.Source === "TEST3");
console.log(Symbol)

Если существует вероятность того, что идентификатор не существует для Source, используйте значение по умолчанию :

let { Identifier: { Symbol } = {} } = input.find(a => a.Identifier.Source === "TEST333") || {};

Если вы не хотите использовать деструктуризацию:

let input = [{Identifier:{Source:"TEST",Symbol:"123456",}},{Identifier:{Source:"TEST2",Symbol:"345678"}},{Identifier:{Source:"TEST3",Symbol:"456789"}}]

let found = input.find(a => a.Identifier.Source === "TEST3");
let source = found && found.Identifier.Source;

console.log(source)
1 голос
/ 21 марта 2019

Используйте * lodash _.flow() и _.partialRight(), чтобы создать функцию, которая использует _.find() для получения объекта с помощью свойства Source, а затем извлекает Symbol, используя _.get() ( _.get() вернет undefined, если элемент не найден).

const { flow, partialRight: pr, find, get } = _

const symbolBySource = src => flow(
  pr(find, ['Identifier.Source', src]),
  pr(get, 'Identifier.Symbol')
)

const identifiers = [{Identifier:{Source:"TEST",Symbol:"123456",}},{Identifier:{Source:"TEST2",Symbol:"345678"}},{Identifier:{Source:"TEST3",Symbol:"456789"}}]

const result = symbolBySource('TEST3')(identifiers)

console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>

И терьер lodash / fp версия:

const { flow, find, get } = _

const symbolBySource = src => flow(
  find(['Identifier.Source', src]),
  get('Identifier.Symbol')
)

const identifiers = [{Identifier:{Source:"TEST",Symbol:"123456",}},{Identifier:{Source:"TEST2",Symbol:"345678"}},{Identifier:{Source:"TEST3",Symbol:"456789"}}]

const result = symbolBySource('TEST3')(identifiers)

console.log(result)
<script src='https://cdn.jsdelivr.net/g/lodash@4(lodash.min.js+lodash.fp.min.js)'></script>
...