在Ramda中避免双重连续

时间:2015-12-19 22:45:46

标签: javascript concatenation ramda.js

我的问题很简单。我最近从Ramda开始,我喜欢它,因为它是纯粹的功能。我对 concat 函数有一点问题,因为它只接受两个列表作为参数。因此,如果我需要连接三个或更多列表,我必须链接这样的函数:concat(list1, concat(list2, concat(list3, list4)))(对于四个列表串联)。有没有更好的方法来做到这一点,我不知道?感谢。

4 个答案:

答案 0 :(得分:1)

我没有使用过Ramda库,但您似乎是在我在您发布的链接中阅读的文档中的node.js中使用它。在这种情况下,您可以在arguments中的函数中使用node.js变量来编写自己的concat函数,该函数将n个列表作为输入。 arguments变量本质上是输入函数的参数数组。

function myConcat () {
  for (var i = 1; i < arguments.length; i++) {
    concat(arguments[0], arguments[i]);
  }
  return arguments[0];
};

但是,在这种情况下,您可能需要将其称为:

list1 = myConcat(list1, list2, list3, list4);

答案 1 :(得分:1)

根据您正在连接的内容和您的环境(需要ES2015),您可以这样做:

 const newList = [...list1, ...list2, ...list3];

否则,你会遇到多次调用concat的问题,尽管你可以用compose使它变得更清晰:

 const newList = compose(concat(list1), concat(list2), concat(list4))(list3);

确实你想要映射或更好,减少:

 const newList = reduce((acc, x) => concat(acc, x), [list3], [list4, list2, list1]);

或内部reduce函数可能如下所示:

 (acc, x) => [...acc, ...x]

答案 2 :(得分:1)

R.unnestR.unapply一起使用可让您将函数称为可变参数:

const unnestAll = R.unapply(R.unnest)
unnestAll([1, 2], [3, 4], [5, 6, 7]) //=> [1, 2, 3, 4, 5, 6, 7]

Scott Cristopher's answer

略有不同

请参阅Example in repl

答案 3 :(得分:1)

您可以通过以下方式使用override func viewWillDisappear(_ animated: Bool) { delegate?.sendBalVariable(balVariables) } 方法:

import PackageDescription let package = Package( name: "WebMIDIKitDemo", dependencies: [ .Package(url: "https://github.com/adamnemecek/WebMIDIKit.git", majorVersion: 1) ] )

从技术上讲,您传递了一个包含所有列表的数组。然后,您只需将它们全部展平为单个阵列即可。

如果您的某些列表可能包含列表本身,请不要使用此方法-它们也会被展平。