[英]Javascript React Return Spread Operator Not Working
我有具有以下架构的 graphQL 查询:
export const ALL_BOOKS = gql` query { allBooks { title published author { name born } id genres } }
我已通过道具将此结果传递给反应组件。 我正在尝试获取每本书的类型并将其存储在一个单一维度的数组中。 对我来说,这样写很有意义:
let genres = props.books.map(book => (...book.genres))
为什么这段代码不起作用? 使用展开运算符返回 object 有什么问题,您认为有什么替代方法可以将 book>book>genres>genre 返回到单个数组中。 我真的很想避免嵌套循环的事情。
谢谢!
输入结构是这样的:
0: {__typename: 'Book', title: 'Book1', published: 2022, author:
{…}, id: '61d5e02beef9d5fcdb5ce26b', …}
1: {__typename: 'Book', title: 'Book2', published: 2022, author:
{…}, id: '61d5e061eef9d5fcdb5ce270', …}
2: {__typename: 'Book', title: 'Book3', published: 2022, author:
{…}, id: '61d5e07a3473e9ac212f87dc', …}
取自控制台日志
-- 使用 Stringfy
[
{
"__typename": "Book",
"title": "The Key of Solomon",
"published": 2022,
"author": {
"__typename": "Author",
"name": "Justin Garzione",
"born": 1999
},
"id": "61d5e02beef9d5fcdb5ce26b",
"genres": [
"Philosophy",
"Witchcraft"
]
},
{
"__typename": "Book",
"title": "The Steez of Solomon",
"published": 2022,
"author": {
"__typename": "Author",
"name": "Horace Gumdrop",
"born": 1998
},
"id": "61d5e061eef9d5fcdb5ce270",
"genres": [
"Philosophy",
"Steezcraft"
]
},
{
"__typename": "Book",
"title": "The Steep",
"published": 2022,
"author": {
"__typename": "Author",
"name": "Bulhar",
"born": null
},
"id": "61d5e07a3473e9ac212f87dc",
"genres": [
"Philosophy",
"Steezcraft"
]
}
]
尝试这个
let genres = props.books.map(book => ({...book.genres}))
从您的问题来看,您似乎只想返回流派:
let genres = props.books.map(book => book.genres)
这将返回一个数组,其中包含从books
道具中提取的流派
稍后编辑:您的问题不清楚,但可能您想从每个流派子列表中获取整个流派列表并删除重复项:
let genres = props.books.map(book => book.genres).flat().reduce((arr, elem) => {
if(arr.indexOf(elem) === -1) {
arr.push(elem);
}
return arr;
}, []);
好吧,您需要在.map(...)
之后添加.flat()
) 。
或者您可以使用reduce方法来累积结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.