Найти объект по id в массиве Ramda - PullRequest
1 голос
/ 03 ноября 2019

Например, у меня есть что-то вроде:

const stuff = {
  "31": [
    {
      "id": "11",
      "title": "ramda heeeelp"
    },
    {
      "id": "12",
      "title": "ramda 123"
    }
  ],
  "33": [
    {
      "id": "3",
      "title": "..."
    }
  ],
  "4321": [
    {
      "id": "1",
      "title": "hello world"
    }
  ]
}

Мне нужно найти объект с идентификатором 11. Как я это сделал:

map(key => find(propEq('id', 11))(stuff[key]), keys(stuff)) 

Однако он возвращает [{..object with id 11..}, undefined, undefined] из-за карты,Хорошо, мы могли бы проверить, не является ли объект неопределенным, но это не ясно, как я хочу.

1 Ответ

4 голосов
/ 03 ноября 2019

Получите значения объекта, сгладьте массив массивов и используйте find и propEq, чтобы получить объект:

const { pipe, values, flatten, find, propEq } = R

const findById = id => pipe(
  values,
  flatten,
  find(propEq({ id }))
)

const data = {"31":[{"id":"11","title":"ramda heeeelp"},{"id":"12","title":"ramda 123"}],"33":[{"id":"3","title":"..."}],"4321":[{"id":"1","title":"hello world"}]}

const result = findById('11')(data)

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