Найти подобъект почтальона на основе свойства - PullRequest
0 голосов
/ 15 апреля 2020

Я хотел бы получить первый элемент, который имеет "shipping":"ABC" в ответе ниже. В этом случае ожидаемый ответ должен быть 37

Я не очень хорошо пишу тест Javascript в Почтальоне.

Спасибо.

{
    "37": {
        "shipping_id": 37,
        "position": 0,
        "status": "D",
        "shipping": "ABC",
        "delivery_time": "24h-72h"
    },
    "36": {
        "shipping_id": 36,
        "position": 0,
        "status": "D",
        "shipping": "DEF",
        "delivery_time": ""
    },
    "28": {
        "shipping_id": 28,
        "position": 0,
        "status": "D",
        "shipping": "GHI",
        "delivery_time": ""
    }

Ответы [ 2 ]

0 голосов
/ 15 апреля 2020

Я нашел решение из другого поста:

var response = JSON.parse(responseBody);

const result = Object.keys(response).find(v => response[v].shipping === 'ABC');

//your object keys are equal to id, you can just return key
console.log(result);

// if your object keys can be different from id you can do this
console.log(response[result].shipping_id);
0 голосов
/ 15 апреля 2020

Это вернет первый элемент с "shipping": "ABC":

// convert response data to array of key-value pairs
const entries = Object.entries(response);

// reduce array to the first matching object
const reducer = (acc, [key, val]) => {
  return (acc === null && val.shipping === "ABC") ?
    (acc = { [key]: val }) : null;
};

// return the found object or null
const found = entries.reduce(reducer, null);
/*
  {
    '37': {
       shipping_id: 37,
       position: 0,
       status: 'D',
       shipping: 'ABC',
       delivery_time: '24h-72h'
    }
  }
*/

Рабочий пример:

const res = {
  "37": {
    shipping_id: 37,
    position: 0,
    status: "D",
    shipping: "ABC",
    delivery_time: "24h-72h"
  },
  "36": {
    shipping_id: 36,
    position: 0,
    status: "D",
    shipping: "DEF",
    delivery_time: ""
  },
  "28": {
    shipping_id: 28,
    position: 0,
    status: "D",
    shipping: "GHI",
    delivery_time: ""
  }
};

const entries = Object.entries(res);

const reducer = (acc, [key, val]) => {
  return (acc === null && val.shipping === "ABC") ?
    (acc = { [key]: val }) : null;
};

const found = entries.reduce(reducer, null);
console.log(found);
...