#javascript #arrays #node.js #express #graphql
#javascript #массивы #node.js #выразить #graphql
Вопрос:
Мне нужно знать индекс элемента массива, когда он не возвращается ответом по потоку. Предположим, моя схема выглядит следующим образом
schema:
type Cart {
items: [Item]
}
type Item {
name: String
index: Int
}
данные поступают:
{items: [{name: apple}, {name: mango},]}
преобразователи выглядят как:
Cart: {
items(obj, context, info) {
return obj;
}
}
Item: {
name(obj, context, info) {
return obj.name;
}
index(obj, context, info) {
// how to get it?
}
}
Как получить ith index
в массиве items?
Комментарии:
1. Если это последовательная запись предыдущего индекса, то вы знаете, каким будет следующий..
2. Я отредактировал распознаватель и поместил комментарий — это в info object?
3. Можно назвать это id вместо index и автоматически увеличить его, затем получить его таким же образом, как вы получаете имя..
4. Можем ли мы поместить что-нибудь в распознаватель корзины и передать идентификатор / индекс оттуда с помощью объекта item? Это массив, который автоматически преобразуется в тип элемента.
Ответ №1:
Если вы хотите повторно указать несколько элементов для одной карточки в элементе, то
type Cart {
items: [Item]!
}
type Item {
name: String!
index: Int!
}
Query {
cardItems: [Cart]!
}
resolver {
cardItems : () => {
//Perform opration and make result like this to run query properly
return [{ items: [{ name: 'name1', index: 0 }, ...]}]
//Which is array of items contain name and index
}
}
// Query to get result
{
cardItems {
items {
name
index
}
}
}
Но если вы хотите получить определенный индекс товара в корзине, вам следует взять id или уникальный ключ индекса и выполнить дополнительный запрос
Query {
itemById(itemId: String!): Item
}
resolver {
itemById({ itemId }) {
//perform opration and return item with respeact to itemId
return { name: 'string', index: 1}
},
}
//Query to get result
{
itemById(itemId: "1"){
name
index
}
}
распознаватель восстанавливает индекс или результат на основе ItemId.