【问题标题】:Array - grab all field items independent of levelArray - 获取独立于级别的所有字段项
【发布时间】:2021-04-14 03:08:37
【问题描述】:

假设我在这里有一个这样的数组:

const data = {
  id: "helloworld",
  type: "Collection",
  _embedded: {
    items: [{
        fields: [{
          id: "bla",
          fields: [{
            id: "nice",
            value: 100
          }]
        }, {
          id: "no",
          fields: [{
            id: "js",
            value: true
          }]
        }]

      },
      {
        fields: [{
          id: "od",
          fields: [{
            id: "adeb",
            value: 456
          }]
        }, {
          id: "def",
          fields: [{
            id: "frft",
            value: 77
          }]
        }]

      }

    ]
  }
}

我想要达到的目标:

-获取 fields 数组中所有项目的扁平化列表。所以最后我需要一个包含字段数组中每个项目的列表。 - 解决方案应该是独立的级别。所以真正找到fields数组的所有项应该越来越深入。

目前我们有:

const flattenedProductFieldsList = data?._embedded?.items
        .flat(2)
        .map((el) => el.fields)
        .filter((el) => el)
        .flat(2)
        .map((el) => el._embedded)
        .filter((el) => el)
        .flat(2)
        .filter((el) => el)
        .map((el) => el.items)
        .filter((el) => el)
        .flat(2)
        .map((el) => el.fields)
        .filter((el) => el)
        .flat(2);

但这当然不好,因为我们被限制在特定的层次结构中。而且这种扁平化一点也不好。

有好的解决办法吗?

【问题讨论】:

    标签: javascript arrays flat


    【解决方案1】:

    你可以试试递归函数。由于您没有指定有关特定订单的任何内容,因此它可能适合您的需要。不过,对于庞大的数据集,这可能会带来问题。

    const result = [];
    
    function extract(dataSet)
         dataSet.forEach(elem => {
             if (Object.keys(elem).includes("fields")) {
                 extract(elem.fields);
             }
             if (Object.keys(elem).includes("value")) {
                 result.push(elem.value);
             }
         }
    }
    
    extract(data._embedded.items);
    console.log(result);
    

    我只在结果数组中添加了每个级别的value 部分,但您可以扩展它以包含所有必需的数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-25
      • 2014-03-14
      • 1970-01-01
      • 1970-01-01
      • 2018-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多