繁体   English   中英

如何使用 ramda 表达式将项目从一个数组推送到另一个数组?

[英]How to push items from an array to another array using ramda expressions?

我有一个小问题,我有一个孩子数组,我解析它,从中获取数据并重新格式化并将其推送到另一个数组subMenuContent ,它工作正常,但我需要更好地清理我的代码,我使用 ramda 作为库来为我简化事情。

这是我之前做的,简单的javascript。

    let subMenuContent = [];

    for (let counter = 0; counter < children.length; counter++) {
      let parent = children[counter].props.item.id;
      let childs = children[counter].props.item.childrens;
      for (let i = 0; i < childs.length; i++) {
        let child = {
          content: childs[i],
          class: 'cdiscountLinks cdiscountChip-' + childs[i].id + '-' + parent,
        };
        subMenuContent.push(child);
      }
    }

我现在想做的是:

    const subMenuContents = map(function(item){
      let parent = item.props.item.id;
      let childs = item.props.item.childrens;
      const itemChilds = map(function(child){
        let childItem = {
          content: child,
          class: 'cdiscountLinks cdiscountChip-' + child.id + '-' + parent,
        }
        return childItem;
      }, childs)
      return itemChilds;

    },children)

编辑:现在我用这个

    const subMenuContents = pipe(
      map(function(item) {
        let parent = item.props.item.id;
        let childs = item.props.item.childrens;
        const itemChilds = map(function(child) {
          let childItem = {
            content: child,
            class: 'cdiscountLinks cdiscountChip-' + child.id + '-' + parent,
          };
          return childItem;
        }, childs);
        return itemChilds;
      }, children),
      flatten,
    )(subMenuContents);

但我收到一个错误:

f.apply is not a function

我究竟做错了什么? 任何帮助将非常感激。

您可能有兴趣查看 Ramda 中的R.chain function。 这有时被称为flatMap ,因为它可以被认为是映射数据类型,然后展平嵌套的结果。

R.chain可以处理许多不同的数据类型,尽管对于 arrays 它有效地映射到数组的每个元素上,为每个元素生成一个数组,然后将它们连接在一起。

在您的示例中,您将希望查看用const subMenuContents = chain(...)替换最外层的const subMenuContents = map(...) ...) 。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM