如何过滤graphql中对象的有限嵌套数组



对于新手的问题很抱歉。我想过滤对象的嵌套数组的输出。这是我的问题:

properties {
codes {
id
}
}

并返回:

{
"data": {
"properties": [
{
"codes": [
{
"id": "1"
},
{
"id": "2"
}
]
},
{
"codes": [
{
"id": "3"
},
{
"id": "4"
}
]
}
]
}
}

我想过滤id="0"的输出;1〃;在properties.codes中。所以新的查询是这样的:

properties {
codes (id: "1") {
id
}
}

并且输出仍然具有空的"0";代码";阵列:

{
"data": {
"properties": [
{
"codes": [
{
"id": "1"
}
]
},
{
"codes": []
}
]
}
}

如何正确过滤输出?我需要这个:

{
"data": {
"properties": [
{
"codes": [
{
"id": "1"
}
]
}
]
}
}

您必须在解析器函数中处理此问题。你还没有提到你喜欢的语言,所以我提供了一个简单的JavaScript/ES6解析器:

// Dummy data
const data = {
properties: [
{
"codes": [
{ "id": "1" },
{ "id": "2" },
{ "id": "3" }
]
},
{
"codes": [
{ "id": "3" },
{ "id": "4" }
]
}
]
}
// grab the id param from the arguments
const resolve = ({ id }) => {
// retrieve the data
const { properties: props } = data
const result = []
// filter data
const properties = props.reduce((acc, cur) => {
const codes = cur.codes.filter(code => code.id === id)
if (codes.length) {
acc.push({ codes })
}
return acc
}, [])
return {
properties
}
}
console.log(resolve({ id: "1" }))
console.log(resolve({ id: "3" }))

最新更新