Более простой способ получить несколько значений из массива

Более простой способ перебора массива response.Body и получения значений определенных элементов Id и DataFields.Value — для использования в журнале консоли.

RESPONSE BODY - это то, что возвращается при отправке запроса в Postman

[
    {
        "Id": "ae61098c-eb7c-4ee8-aca7-aa080112d656",
        "DataFields": [
            {
                "Header": "LocationDetails.LocationID",
                "Value": "BH127"
            }
        ],
    },
    {
        "Id": "84cd9a9f-d085-4642-b484-aa080112d656",
        "DataFields": [
            {
                "Header": "LocationDetails.LocationID",
                "Value": "BH128"
            }
        ],
    },
    {
        "Id": "6629d92b-1dcf-4fc1-a019-aa080112d656",
        "DataFields": [
            {
                "Header": "LocationDetails.LocationID",
                "Value": "BH129"
            }
        ],
    },
    {
        "Id": "47442b4f-f691-4213-b705-aa080112d656",
        "DataFields": [
            {
                "Header": "LocationDetails.LocationID",
                "Value": "BH130"
            }
        ],
    }
]

МОЙ КОД - JavaScript на вкладке "Тесты"

var logReportDataQryResults = JSON.parse(responseBody);
var locationOne = 0;
var locationTwo = 1;
var locationThree = 2;

var boreholeOne = logReportDataQryResults[locationOne].Id;
const objOne = logReportDataQryResults[locationOne].DataFields.find(({ Header }) => Header == 'LocationDetails.LocationID');
const holeOne = objOne ? objOne.Value : 'Not Found';

var boreholeTwo = logReportDataQryResults[locationTwo].Id;
const objTwo = logReportDataQryResults[locationTwo].DataFields.find(({ Header }) => Header == 'LocationDetails.LocationID');
const holeTwo = objTwo ? objTwo.Value : 'Not Found';

var boreholeThree = logReportDataQryResults[locationThree].Id;
const objThree = logReportDataQryResults[locationThree].DataFields.find(({ Header }) => Header == 'LocationDetails.LocationID');
const holeThree = objThree ? objThree.Value : 'Not Found';

Я хочу сделать код более эффективным и читабельным

Вы пытаетесь получить Value элемент с Header «LocationDetails.LocationID» и сделать это для первых трех объектов в этом массиве?

VLAZ 09.04.2019 11:01

@VLAZ, да я

Zienu 09.04.2019 11:03
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
73
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете использовать один объект вместо множества отдельных переменных — используйте .map для перебора местоположений и создания нового массива с необходимой вам информацией:

const logReportDataQryResults = [
    {
        "Id": "ae61098c-eb7c-4ee8-aca7-aa080112d656",
        "DataFields": [
            {
                "Header": "LocationDetails.LocationID",
                "Value": "BH127"
            }
        ],
    },
    {
        "Id": "84cd9a9f-d085-4642-b484-aa080112d656",
        "DataFields": [
            {
                "Header": "LocationDetails.LocationID",
                "Value": "BH128"
            }
        ],
    },
    {
        "Id": "6629d92b-1dcf-4fc1-a019-aa080112d656",
        "DataFields": [
            {
                "Header": "LocationDetails.LocationID",
                "Value": "BH129"
            }
        ],
    },
    {
        "Id": "47442b4f-f691-4213-b705-aa080112d656",
        "DataFields": [
            {
                "Header": "LocationDetails.LocationID",
                "Value": "BH130"
            }
        ],
    }
]

const locations = [0, 1, 2];
const boreholes = locations.map((location) => {
  const { Id, DataFields } = logReportDataQryResults[location];
  const obj = DataFields.find(({ Header }) => Header == 'LocationDetails.LocationID');
  const holeValue = obj ? obj.Value : 'Not Found';
  return { Id, obj, holeValue };
});
console.info(boreholes);

Извините, не заметил, что ваш ответ был первым. И он лучше моего, поэтому => плюс! :)

David 09.04.2019 11:17
Ответ принят как подходящий

Вы всегда используете один и тот же шаблон (меняя части, написанные ALL_UPPERCASE):

var boreholeOne = logReportDataQryResults[ LOCATION ].Id;
const objOne = logReportDataQryResults[ LOCATION ].DataFields.find(({ Header }) => Header == 'LocationDetails.LocationID');
const holeOne = objOne ? objOne.Value : 'Not Found';

Вы можете инкапсулировать его в функцию и передать в нее изменяющиеся части:

const getBoreholeValue = (locationId, data) => {
  const id = data[locationId].Id;
  const obj = data[locationId].DataFields.find(({ Header }) => Header == 'LocationDetails.LocationID');
  return obj ? obj.Value : 'Not Found';
}

А затем используйте его следующим образом:

const res1 = getBoreholeValue(0, logReportDataQryResults);
const res2 = getBoreholeValue(1, logReportDataQryResults);
const res3 = getBoreholeValue(2, logReportDataQryResults);

Пример:

const respBody = [
    {
        "Id": "ae61098c-eb7c-4ee8-aca7-aa080112d656",
        "DataFields": [
            {
                "Header": "LocationDetails.LocationID",
                "Value": "BH127"
            }
        ],
    },
    {
        "Id": "84cd9a9f-d085-4642-b484-aa080112d656",
        "DataFields": [
            {
                "Header": "LocationDetails.LocationID",
                "Value": "BH128"
            }
        ],
    },
    {
        "Id": "6629d92b-1dcf-4fc1-a019-aa080112d656",
        "DataFields": [
            {
                "Header": "LocationDetails.LocationID",
                "Value": "BH129"
            }
        ],
    },
    {
        "Id": "47442b4f-f691-4213-b705-aa080112d656",
        "DataFields": [
            {
                "Header": "LocationDetails.LocationID",
                "Value": "BH130"
            }
        ],
    }
]

const getBoreholeValue = (locationId, data) => {
  const id = data[locationId].Id;
  const obj = data[locationId].DataFields.find(({ Header }) => Header == 'LocationDetails.LocationID');
  return obj ? obj.Value : 'Not Found';
}

console.info(getBoreholeValue(0, respBody));
console.info(getBoreholeValue(1, respBody));
console.info(getBoreholeValue(2, respBody));
    var logReportDataQryResults = 
        [
        {
            "Id": "ae61098c-eb7c-4ee8-aca7-aa080112d656",
            "DataFields": [
                {
                    "Header": "LocationDetails.LocationID",
                    "Value": "BH127"
                }
            ],
        },
        {
            "Id": "84cd9a9f-d085-4642-b484-aa080112d656",
            "DataFields": [
                {
                    "Header": "LocationDetails.LocationID",
                    "Value": "BH128"
                }
            ],
        },
        {
            "Id": "6629d92b-1dcf-4fc1-a019-aa080112d656",
            "DataFields": [
                {
                    "Header": "LocationDetails.LocationID",
                    "Value": "BH129"
                }
            ],
        },
        {
            "Id": "47442b4f-f691-4213-b705-aa080112d656",
            "DataFields": [
                {
                    "Header": "LocationDetails.LocationID",
                    "Value": "BH130"
                }
            ],
        }
        ]



    const boreholes=[];

    for (key in logReportDataQryResults) {

        const { Id, DataFields } = logReportDataQryResults[key];
        const obj = DataFields.find(({ Header }) => Header == 'LocationDetails.LocationID');
        const holeValue = obj ? obj.Value : 'Not Found';
        boreholes.push({ "Id": Id,"holeValue": holeValue });
    }
    console.info(boreholes) 

Другие вопросы по теме