#javascript #ramda.js
#javascript #ramda.js
Вопрос:
Я хотел бы включить эту функцию:
const get1 = (v, d) => path(split(/[[].]/, d), v);
get1("a.d", {a:{d:"f"}})
в канал или функцию compose без необходимости ее использования таким образом:
get1("a.d")({a:{d:"f"}})
Ответ №1:
Думаю, мне любопытно, почему по двум вопросам. Во-первых, что-то не так fn (a) (b)
? Я лично обнаружил, что теперь я склоняюсь к этому в первую очередь, даже когда мне это не нужно. Это просто личные предпочтения или там есть что-то более глубокое?
Во-вторых, почему вы хотите переписать идеально читаемую функцию для использования pipe
/ compose
? Я один из основателей Ramda, и мне нравится библиотека, но я, конечно, не вижу необходимости делать все без точек.
Что касается того, как, Hitmands уже дал разумный ответ, используя несколько странный Ramda useWith
. Альтернативой является pipe
/ compose
и передавать результаты в uncurryN
:
const get2 = uncurryN (2, pipe (split (/[[].]/), path))
console .log (get2 ("a.d", {a: {d: "f"}}))
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.27.1/ramda.js"></script>
<script> const {uncurryN, pipe, split, path} = R </script>
Но любой из этих ответов кажется менее читабельным, чем оригинал.
Ответ №2:
Это должно помочь:
const fn = R.useWith(R.path, [R.split('.'), R.identity]);
console.log(
fn("a.d")({ a: { d: 'f' } }), //curried call
);
console.log(
fn("a.d", { a: { d: 'f' } }), //call with two arguments
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.27.1/ramda.js" integrity="sha512-3sdB9mAxNh2MIo6YkY05uY1qjkywAlDfCf5u1cSotv6k9CZUSyHVf4BJSpTYgla YHLaHG8LUpqV7MHctlYzlw==" crossorigin="anonymous"></script>