как отсортировать массив с помощью конфигурации - PullRequest
0 голосов
/ 13 июля 2020

как отсортировать файл массива, используя значение конфигурации на Ramda. Я пробовал использовать R.map, затем добавляю условие R.includes и, если оно истинное, возвращаемое значение R. всегда, но я продолжаю получать [[Function], [ Функция], [Функция]]

код, который я использую

args = [ 'BBQ', 'Tuna', 'Cake', 'Wood' ]

config = [ { foodType: 'Tuna' },
           { foodType: 'BBQ' },
           { foodType: 'Cake' } ]

const getPriority = R.curry((config, args) =>
  R.pipe(
    R.map(
      R.pipe(
        R.prop('foodType'),
          R.ifElse(
           R.includes(args),
           R.always
        )
      )
    ),
    R.flatten,
  )(config)
);

Expected result is [ 'Tuna', 'BBQ', 'Cake' ]

любая идея, почему я продолжаю получать [[Функция], [Функция], [Функция]]

1 Ответ

2 голосов
/ 13 июля 2020

Я пытаюсь угадать ваши требования здесь, исходя из того, что я вижу в коде. Мне кажется, что вам нужны foodTypes из config, которые также можно найти в args, отсортированные по порядку, в котором они появляются в config. Это верно?

Если так, то этот код, похоже, работает:

const getPriority = (args) => (config) =>
  config .reduce ((a, {foodType}) => args.includes(foodType) ? [...a, foodType] : a, [])

const args = [ 'BBQ', 'Tuna', 'Cake', 'Wood' ]

const config = [ { foodType: 'Tuna' },
                 { foodType: 'Sprouts' }, // added -- not everything is in output
                 { foodType: 'BBQ' },
                 { foodType: 'Cake' } ]

console .log (getPriority (args) (config))

Мы могли бы использовать для этого некоторую функцию Ramda, если бы выбрали:

const getPriority = (args) =>
  reduce ((a, {foodType}) => includes (foodType, args) ? append(foodType, a) : a, [])

Или, возможно, другую версию:

const getPriority = (args) =>
  pipe(pluck('foodType'), filter(flip(includes)(args)))

... но они, кажется, не добавляют много к этой функции. Я один из основателей Ramda, но я считаю его инструментом, который можно использовать, когда он помогает, а не новым фреймворком или мини-языком для программирования. Здесь, кажется, не так много пользы.

...