【问题标题】:Simpler way to retrieve multiple values from array从数组中检索多个值的更简单方法
【发布时间】:2019-08-30 12:17:36
【问题描述】:

一种更简单的方法来遍历 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,是的,我是

标签: javascript arrays postman


【解决方案1】:

您总是使用相同的模式(更改部分以 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.log(getBoreholeValue(0, respBody));
console.log(getBoreholeValue(1, respBody));
console.log(getBoreholeValue(2, respBody));

【讨论】:

    【解决方案2】:

    您可以使用单个对象而不是许多单独的变量 - 使用 .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.log(boreholes);

    【讨论】:

    • 对不起,没有注意到你的答案是第一个。它比我的好,因此=> 赞成! :)
    【解决方案3】:
        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.log(boreholes) 
    

    【讨论】:

      猜你喜欢
      • 2015-08-26
      • 2013-10-10
      • 1970-01-01
      • 2011-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多