javascript - JS / React - 如何从一个对象内一次映射两个对象
问题描述
我正在开发一个 React Gatsby.js项目。对于搜索功能,我使用了一个名为gatsby-plugin-local-search 的插件
为了使这个插件工作,我必须在gatsby-config.js
文件中运行 GraphQL 查询。然后在规范器中处理数据。下面是脚本的示例代码。请注意我拿出了normelizer。因为我的问题就在这个范围内,我将在下面详细讨论。
{
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"),
`
解决方案
事实上,你的想法是好的,当你尝试{...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
推荐阅读
- r - 纯素阿多尼斯错误后DESeq2的名称发生变化
- c++ - 在 c++20 中是否有任何用 std::array 定义的成员函数?
- javascript - 当我想执行 javascript 功能时, 'href' 属性在标签中不起作用
- python - 循环和合并查询集
- python - 对 Def Python 感到困惑
- flutter - Flutter - 文本编辑控制器为空,但 Flutter 认为存在价值?
- python - LSTM-分离隐藏状态
- c# - c# 按项目块拆分列表
- android - 这个 android 应用教程代码中的 layoutInflater 定义在哪里?
- arrays - 如何在 Yii2 视图中更改数组的选择选项中的值?