如何在and对象的prop上使用方法,然后返回object

时间:2019-02-03 18:13:04

标签: javascript ramda.js

我正在尝试使用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')
    ]
)

1 个答案:

答案 0 :(得分:0)

我不会说使用nthArg是不好的做法。但是我不确定索引是否正确。我认为应该是nthArg(0)nthArg(1)

无论如何,您可能仍想使用useWith来代替,在这种情况下,您无需使用nthArg而是使用identity返回keyvalue分别。

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);