首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JS / React -如何从一个对象中一次.map两个对象

JS / React -如何从一个对象中一次.map两个对象
EN

Stack Overflow用户
提问于 2020-04-22 19:09:57
回答 2查看 109关注 0票数 0

我正在做一个React Gatsby.js项目。对于搜索功能,我使用了一个名为gatsby-plugin-local-search的插件

为了让这个插件工作,我必须在gatsby-config.js文件中运行一个GraphQL查询。然后在归一化程序中对数据进行处理。下面是该脚本的示例代码。请注意,我去掉了归一化。因为我的问题在这个范围内,我将在下面更多地讨论它。

代码语言:javascript
复制
    {
      resolve: "gatsby-plugin-local-search",
      options: {
        name: "pagesNL",
        engine: "flexsearch", // The following engines are supported: flexsearch, lunr
        engineOptions: "speed", // Note: Only the flexsearch engine supports options.
        query: `
          {
            allSanityPage {
              nodes {
                id
                title {
                  _key
                  _type
                  en
                  nl
                }
                _rawBlockRows
                slug {
                  current
                }
              }
            }
            allSanityBlog {
              nodes {
                title {
                  _type
                  en
                  nl
                }
                slug {
                  current
                }
                _id
                _rawBody
              }
            }
          }
        `,
        ref: "id",
        index: ["id", "title", "body"],
        store: ["id", "path", "title"],
        normalizer: ({ data }) => (
            // do something with the data <----------------
        ),
      },

如您所见,我查询了allSanityPageallSanityBlog。现在的目标是从该脚本合并数据并同时映射它们。

问题是

我怎样才能一次.map()它们?

首先是一个适用于allSanityPage的工作示例

代码语言:javascript
复制
       normalizer: ({ data }) => (
          data.allSanityPage.nodes.map(node => ({
            id: node.id,
            path: node.slug.current,
            title: localizeData(node.title, "nl"),
            body: localizeData(node._rawBlockRows, "nl"),
          }))
       ),

我正在寻找一种同时使用data.allSanityPage.nodesdata.allSanityBlog.nodes对象填充它的方法

我想像这样的东西会有用的:

代码语言:javascript
复制
{...data.allSanityPage.nodes, ...data.allSanityBlog.nodes}.map()

但这显然行不通

(我不担心body:,因为我会像body: (node._rawBlockRows) ? localizeData(node._rawBlockRows, "nl"): localizeData(node._rawBody, "nl"),一样有条件地检查它`

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-22 19:49:20

实际上,当您尝试{...data.allSanityPage.nodes, ...data.allSanityBlog.nodes}.map()时,您的想法是好的

错误是你.map()一个对象,这个对象在他的原型中没有这个功能。

试试[...data.allSanityPage.nodes, ...data.allSanityBlog.nodes].map(...

来源:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

票数 2
EN

Stack Overflow用户

发布于 2020-04-22 19:21:46

可以通过在第一个映射函数中嵌套映射函数来执行此操作

代码语言:javascript
复制
 normalizer: ({ data }) => (
      data.allSanityPage.nodes.map(node => 
          data.allSanityBlog.nodes.map(node2 =>
             //your code
             )
           )

一个这样的例子是

代码语言:javascript
复制
a.map(e1 => b.map(e2 => 
     console.log(e1 == e2)))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61363661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档