Более простой способ перебора массива 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';
Я хочу сделать код более эффективным и читабельным
@VLAZ, да я
Вы можете использовать один объект вместо множества отдельных переменных — используйте .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);
Извините, не заметил, что ваш ответ был первым. И он лучше моего, поэтому => плюс! :)
Вы всегда используете один и тот же шаблон (меняя части, написанные 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)
Вы пытаетесь получить
Value
элемент сHeader
«LocationDetails.LocationID» и сделать это для первых трех объектов в этом массиве?