Как получить индекс из array — graphql?

#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.