Как отфильтровать результаты JSON.parse - PullRequest
2 голосов
/ 01 октября 2019

Я пытался отфильтровать результаты вызова API на основе моего значения "note". Я строил его на Zapier, и вызов работает, но я не могу найти способ заставить функцию фильтра выполнять свою работу (поэтому, если я заменю строку 19-23 на return results; тогда она выдаст мне все заказы отвызов API). Я пролил все документы стека, которые смог найти, но все они заканчиваются ошибкой result.filter not found или bargle (общая ошибка в Zapier).

const options = {
  url: `https://mystorename.myshopify.com/admin/orders.json?`,
  method: 'GET',
  headers: {
    'Content-Type': 'application/json',
    'Accept': 'application/json'
  },
  params: {

  }
}

return z.request(options)
  .then((response) => {
    response.throwForStatus();
 
var results = z.JSON.parse(response.content);
var queryItem = "555-5555"
const filteredOrders = results.orders.filter(item => item.note === queryItem);
   return filteredOrders;
  
});

И это пример моего токового выхода с return results; и без фильтра:

{
  "orders": [
     {
      "note": "555-5555",
      "subtotal_price": "1.00"
     },
     {
      "note": "555-6666",
      "subtotal_price": "2.00"
     } 
  ]
}

Снова цель состоит в том, чтобы отфильтровать по значению в клавише «note». Так что, если мой вход фильтра 555-5555, то он должен возвращать всю информацию только для этого элемента. Я пытался использовать оператор if для возврата, stringify вместо синтаксического анализа, скрытия в массив ... все с необходимым кодом, но независимо от формата, который я нахожу, фильтр не работает или ничего не возвращается. Я продолжу работать над этим, поэтому, если мне удастся найти ответ, я опубликую его, но в этот момент я чувствую себя застрявшим.

Ответы [ 3 ]

3 голосов
/ 01 октября 2019

Вы пытаетесь использовать метод filter в объекте, но фильтр доступен только в массиве, поэтому вы должны попытаться вызвать filter в массиве заказов.

let results = {
  "orders": [
     {
      "note": "555-5555",
      "subtotal_price": "1.00"
     },
     {
      "note": "555-6666",
      "subtotal_price": "2.00"
     } 
  ]
}

let queryItem = "555-5555";

let newArray = results.orders.filter(function (item) {
  return item.note == queryItem
})

console.log(newArray)

Обновлено, чтобы содержать реальный http-вызов:

const url = 'http://www.mocky.io/v2/5d9466142f000058008ff6b7'

const options = {
    method: 'GET',
    headers: {
      'Content-Type': 'application/json',
      'Accept': 'application/json'
    },
}

const response = await fetch(url, options)
const results = await response.json()

const queryItem = "555-5555"
const filteredOrders = results.orders.filter(item => item.note === queryItem)

console.log(filteredOrders)
1 голос
/ 01 октября 2019

Вы пытаетесь отфильтровать по results, но, согласно вашему выводу, вы должны фильтровать по results.orders.

const filteredOrders = results.orders.filter(item => item.note === queryItem);
0 голосов
/ 02 октября 2019

Получаете ли вы все заказы обратно (все заказы с указанным значением фильтра)?

Я понял, что не возвращаю все заказы, и это помогло:

`https://mystorename.myshopify.com/admin/orders.json?status=any`

Кроме того, вы можете запросить заказы с этой конкретной запиской:

`https://mystorename.myshopify.com/admin/orders.json?status=any&note=` + queryItem
...