【发布时间】:2018-05-22 03:31:07
【问题描述】:
我正在尝试将 2 个点符号字符串合并到仅使用 javascript(可以是 ES6/typescript)的 GrahQL 查询中。
例如,假设我有一个字符串数组
[
'firstName',
'lastName',
'billing.address.street',
'billing.address.zip',
'shipping.address.street',
'shipping.address.zip'
]
预期的查询字符串输出将是(空格不重要)
firstName, lastName, shipping{address{street, zip}}, billing{address{street, zip }}
我可以将点表示法 1 到 1 转换为查询字符串,但是如何将所有这些合并在一起?我有一个接受street.name 并输出street { name } 的函数。所以这个函数就可以了
convertToString(inputString) {
let result = '';
if (inputString.indexOf('.') === -1) {
result = inputString;
} else {
const inputArray = inputString.split('.');
for (let i = inputArray.length - 1; i >= 0; i--) {
if (i === 0) {
result = inputArray[i] + result;
} else {
result = '{' + inputArray[i] + result + '}';
}
}
}
return result;
}
console.log(convertToString('address.street')); // address { street }
但是我将如何遍历所有字符串并仅获取 1 个将相同属性组合到一个组中的 GraphQL 查询字符串。主要问题是如何在不丢失任何内容且不重复的情况下合并 2 个点表示法字符串(此时,我可以得到这个 address { name } address { zip } 但是当它在 GraphQL 服务器上运行时,只保留后者,所以只有zip 出现在结果中。
我尝试创建代表结构的临时对象,但效果不佳。
【问题讨论】:
标签: javascript graphql graphql-js