Найти подобъект Postman на основе свойства

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

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

Спасибо.

{
    "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": ""
    }

person Quang T    schedule 14.04.2020    source источник


Ответы (2)


Я нашел решение из другого сообщения:

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);
person Quang T    schedule 15.04.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);

person terrymorse    schedule 15.04.2020
comment
всем привет. у меня это не сработало. Я нашел другое решение, используя Object.keys. Спасибо, в любом случае. - person Quang T; 15.04.2020
comment
Код выше работает правильно. Я добавил рабочий пример для проверки. - person terrymorse; 15.04.2020