我正在做一个React Gatsby.js项目。对于搜索功能,我使用了一个名为gatsby-plugin-local-search的插件
为了让这个插件工作,我必须在gatsby-config.js文件中运行一个GraphQL查询。然后在归一化程序中对数据进行处理。下面是该脚本的示例代码。请注意,我去掉了归一化。因为我的问题在这个范围内,我将在下面更多地讨论它。
{
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 <----------------
),
},如您所见,我查询了allSanityPage和allSanityBlog。现在的目标是从该脚本合并数据并同时映射它们。
问题是
我怎样才能一次.map()它们?
首先是一个适用于allSanityPage的工作示例
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.nodes和data.allSanityBlog.nodes对象填充它的方法
我想像这样的东西会有用的:
{...data.allSanityPage.nodes, ...data.allSanityBlog.nodes}.map()但这显然行不通
(我不担心body:,因为我会像body: (node._rawBlockRows) ? localizeData(node._rawBlockRows, "nl"): localizeData(node._rawBody, "nl"),一样有条件地检查它`
发布于 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
发布于 2020-04-22 19:21:46
可以通过在第一个映射函数中嵌套映射函数来执行此操作
normalizer: ({ data }) => (
data.allSanityPage.nodes.map(node =>
data.allSanityBlog.nodes.map(node2 =>
//your code
)
)一个这样的例子是
a.map(e1 => b.map(e2 =>
console.log(e1 == e2)))https://stackoverflow.com/questions/61363661
复制相似问题