我试图再现使用Ramda的appendSearchParam功能,即施加的物体的支撑的方法和然后返回所述对象。
我最好的射门被提供的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')
]
)
我不会说,使用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);