我正在尝试使用Ramda来复制appendSearchParam函数,即应用对象的prop方法,然后返回所述对象。
我的最佳选择是提供的aSP函数,但是此函数不返回url对象,我严重怀疑我的“ nthArg”是一种很好的做法。然后,我尝试将R.tap与aSP一起使用,但没有结果。
import {
URL
} from 'url'
import R from 'ramda'
const u = new URL('http://www.google.com')
const appendSearchParam = (url, key, value) => {
url.searchParams.append(key, value)
return url
}
const aSP = R.converge(
R.invoker(2, 'append'),
[
R.nthArg(1),
R.nthArg(2),
R.prop('searchParams')
]
)
答案 0 :(得分:0)
我不会说使用nthArg
是不好的做法。但是我不确定索引是否正确。我认为应该是nthArg(0)
和nthArg(1)
。
无论如何,您可能仍想使用useWith
来代替,在这种情况下,您无需使用nthArg
而是使用identity
返回key
和value
分别。
const asp = useWith(
invoker(2, 'append'), [
identity, // return key
identity, // return value
prop('searchParams')]); // get 'searchParams' from url
问题不在于功能,而是您要与之交互的API。如您所见,append将返回undefined
,但仍附加查询:
const url = new URL('http://foo.bar');
console.log(url.searchParams.append('x', 42));
console.log(url);
我不确定无点函数在这里是否有意义,因为您需要引用url
才能返回它。
我可能会改成这样:
const asp = curry((key, value, url) =>
url.searchParams.append(key, value) || url);