簡體   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