Javascript 使用saccession.js合并多个对象

Javascript 使用saccession.js合并多个对象,javascript,functional-programming,ramda.js,sanctuary,Javascript,Functional Programming,Ramda.js,Sanctuary,我正在尝试将多个对象与保护区合并 使用Ramda.js,我可以做如下操作(参见REPL): 但是,对于Santuary.js,下面的代码行抛出了一个异常 S.reduce(Object.assign)(initialEntry)(entries) 以下是我得到的一个例外: ! Invalid value reduce :: Foldable f => (a -> b -> a) -> a -> f b -> a

我正在尝试将多个对象与保护区合并

使用Ramda.js,我可以做如下操作(参见REPL):

但是,对于Santuary.js,下面的代码行抛出了一个异常

S.reduce(Object.assign)(initialEntry)(entries)
以下是我得到的一个例外:

! Invalid value

reduce :: Foldable f => (a -> b -> a) -> a -> f b -> a
                              ^^^^^^
                                1

1)  {"a": 0, "b": 1} :: Object, StrMap Number, StrMap FiniteNumber, StrMap Integer, StrMap NonNegativeInteger, StrMap ValidNumber

The value at position 1 is not a member of ‘b -> a’.

我对这个错误消息感到困惑。我是否错误地使用了
S.reduce
?另外,如果我写
S.reduce(Object.assign)(initialEntry)([])
我也不会出错,这是因为
reduce
的第一个参数使用了一个带有签名的函数
a->b->a
。与拉姆达不同,庇护所对此类签名要求严格。必须为其提供一个函数,该函数接受一种类型的参数并返回一个函数,该函数接受第二种类型的参数并返回第一种类型的参数<代码>对象分配不执行此操作。它一次获取可变数量的对象

您可以通过将
Object.assign
替换为
a=>b=>Object来解决此问题。assign(a,b)

constinitialentry={a:0,b:1};
常量项=[{c:2},{d:3,e:4},{f:5,g:6,h:7}];
const res=S.reduce(a=>b=>Object.assign(a,b))(initialEntry)(条目);
控制台日志(res)


const S=saccession
这是因为
reduce
的第一个参数使用签名为
a->b->a的函数。与拉姆达不同,庇护所对此类签名要求严格。必须为其提供一个函数,该函数接受一种类型的参数并返回一个函数,该函数接受第二种类型的参数并返回第一种类型的参数<代码>对象分配
不执行此操作。它一次获取可变数量的对象

您可以通过将
Object.assign
替换为
a=>b=>Object来解决此问题。assign(a,b)

constinitialentry={a:0,b:1};
常量项=[{c:2},{d:3,e:4},{f:5,g:6,h:7}];
const res=S.reduce(a=>b=>Object.assign(a,b))(initialEntry)(条目);
控制台日志(res)

const S=saccession
可以专用于
a->a
。因此,
()({})
的类型是
f=>f(a)->a
。这可以专用于
(a)->a
。例如:

> S.reduce (S.concat) ({}) ([{a: 0, b: 1}, {c: 2}, {d: 3, e: 4}, {f: 5, g: 6, h: 7}])
{a: 0, b: 1, c: 2, d: 3, e: 4, f: 5, g: 6, h: 7}
避难所不提供合并任意对象的功能。

可以专用于
a->a->a
。因此,
()({})
的类型是
f=>f(a)->a
。这可以专用于
(a)->a
。例如:

> S.reduce (S.concat) ({}) ([{a: 0, b: 1}, {c: 2}, {d: 3, e: 4}, {f: 5, g: 6, h: 7}])
{a: 0, b: 1, c: 2, d: 3, e: 4, f: 5, g: 6, h: 7}

避难所不提供合并任意对象的功能。

以防它有助于在避难所中找到类似的功能;我将在Ramda中使用合并对象列表。。。。和
unapply(mergeAll)
用于更接近
Object.assign
的变量版本。或者可能是ˋunapply(Object.assign)ˋ?以防它有助于在保护区中找到类似的函数;我将在Ramda中使用合并对象列表。。。。和
unapply(mergeAll)
用于更接近
Object.assign
的变量版本。或者可能是ˋunapply(Object.assign)ˋ?