Рамда находит два разных значения вложенных ключей - PullRequest
0 голосов
/ 03 июля 2018

Я новичок в этой Рамде, возможно получить два разных значения ключа на одном уровне объекта?.

Я добавил тот же код ниже:

Здесь у объекта списка есть ключевые слова для пользователей и сотрудников, которые я пытаюсь получить, чтобы получить данные о пользователях и сотрудниках.

const R = require('ramda');

var list = [
  {"doc":{"Title":"test1","Relations":{"users":[{"name": "user1"}]}}},
  {"doc":{"Title":"test2","Relations":{"employee":[{"name": "user2"}]}}}
];

var getDetails=  R.map(
  R.pipe(
    R.prop('doc'),
    R.pipe(R.path(['Relations', 'users']))
  )
)

getDetails(list);

В своем коде я использовал только ключ пользователя. можно получить оба ключа (пользователей и сотрудников).

Токовый выход:

[[{"name": "user1"}], undefined]

Ожидаемый вывод:

[[{"name": "user1"}], [{"name": "user2"}]]

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Вы не слишком далеко от решения с тем, что у вас уже есть.

Некоторые другие функции, которые могут помочь здесь:

  • R.pick - который преобразует объект и включает только те ключи, которые вы предоставили (например, users, employee).
  • R.values - функция Рамды, эквивалентная Object.prototype.values.
  • R.chain - это позволяет отобразить ваш список, а затем сгладить результирующий вложенный список.

const list = [
  {"doc":{"Title":"test1","Relations":{"users":[{"name": "user1"}]}}},
  {"doc":{"Title":"test2","Relations":{"employee":[{"name": "user2"}]}}}
]

const getDetails = R.chain(R.pipe(
  R.path(['doc', 'Relations']),
  R.pick(['users', 'employee']),
  R.values
))

const result = getDetails(list)

console.log(result)
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.min.js"></script>
0 голосов
/ 03 июля 2018

Вы можете использовать функции ifElse и isNil:

var getDetails=  R.map(
  R.pipe(
    R.prop("doc"),
    R.pipe(
      R.ifElse(
        R.pipe(R.path(["Relations", "users"]), R.isNil),
        R.path(["Relations", "employee"]),
        R.path(["Relations", "users"])
      )
    )
  )
)
...