为了账号安全,请及时绑定邮箱和手机立即绑定

在 API 响应中迭代并可能返回多个项目的正确方法是什么?

在 API 响应中迭代并可能返回多个项目的正确方法是什么?

拉丁的传说 2023-10-20 10:25:08
以下是我为 SDK 创建的一个 API 调用,该调用返回带有各种字段的 Javascript 对象:    listProjects(company_id) {        return axios.get(BASE_URL + 'projects?company_id=' + company_id, {            headers: {                Authorization: this.access_token            }        })            .then(function (response) {                //console.log(response.data);                const obj = response.data;                var return_obj = { //needs to return data for all the projects not just the first                    id: obj[0].id,                    name: obj[0].name,                    display_name: obj[0].display_name,                    address: obj[0].address,                    city: obj[0].city,                    state_code: obj[0].state_code,                    country_code: obj[0].country_code,                    zip: obj[0].zip,                    latitude: obj[0].latitude,                    longitude: obj[0].longitude                };                return return_obj;            })            .catch(function (error) {                console.log(error);                return error;            });    }响应如下所示,其中可能有多个项目。我不确定应该如何在不硬编码固定长度循环的情况下进行迭代,以及应该如何相应地构造我的返回对象。[    {        "id": 20789,        "name": "Sandbox Test Project",        "display_name": "1234 - Sandbox Test Project",        "project_number": "1234",        "address": "6309 Carpinteria Avenue",        "city": "Carpinteria",        "state_code": "CA",        "country_code": "US",        "zip": "93013",        "county": "Santa Barbara County",        "time_zone": "US/Pacific",        "latitude": 34.3850438,        "longitude": -119.4908492,        "stage": "None",        "phone": null,        }    }]
查看完整描述

3 回答

?
狐的传说

TA贡献1804条经验 获得超3个赞

您可以循环遍历结果


listProjects(company_id) {

return axios.get(BASE_URL + 'projects?company_id=' + company_id, {

    headers: {

        Authorization: this.access_token

    }

})

    .then(function (response) {

        //console.log(response.data);

        //const obj = response.data;

        var return_array = [];

        for (var i=0; i<response.data.length; i++){ //iterate

            var obj = {  //construct i-th object

                id: response.data[i].id,

                name: response.data[i].name,

                display_name: response.data[i].display_name,

                address: response.data[i].address,

                city: response.data[i].city,

                state_code: response.data[i].state_code,

                country_code: response.data[i].country_code,

                zip: response.data[i].zip,

                latitude: response.data[i].latitude,

                longitude: response.data[i].longitude

            };

            return_array.push(obj); //push object to array

        }                       

        return return_array; //return array with all the objects

    })

    .catch(function (error) {

        console.log(error);

        return error;

    });

}


查看完整回答
反对 回复 2023-10-20
?
千巷猫影

TA贡献1829条经验 获得超7个赞

从您的代码中我可以看到您只是使用相同的键名称重新分配值。因此,return_obj; 为什么不直接返回obj[0]; 已经有键值对的返回,而不是返回 return 。



查看完整回答
反对 回复 2023-10-20
?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

描述

您正在寻找一个for循环或一个forEach循环response.data.forEach(element => { //loop code }); ,如果使用for您想要使用的循环for (let i = 0; i < response.data.length; i++) { //loop over response.data[i] }


例子

for循环


let data = [

    {

        "id": 20789,

        "name": "Sandbox Test Project",

        "display_name": "1234 - Sandbox Test Project",

        "project_number": "1234",

        "address": "6309 Carpinteria Avenue",

        "city": "Carpinteria",

        "state_code": "CA",

        "country_code": "US",

        "zip": "93013",

        "county": "Santa Barbara County",

        "time_zone": "US/Pacific",

        "latitude": 34.3850438,

        "longitude": -119.4908492,

        "stage": "None",

        "phone": null,

        "created_at": "2020-04-03T00:35:03Z",

        "updated_at": "2020-04-03T00:45:17Z",

        "active": true,

        "origin_id": null,

        "origin_data": null,

        "origin_code": null,

        "owners_project_id": null,

        "estimated_value": null,

        "project_region_id": null,

        "project_bid_type_id": null,

        "project_owner_type_id": null,

        "photo_id": 310560,

        "start_date": null,

        "completion_date": null,

        "total_value": null,

        "accounting_project_number": null,

        "store_number": null,

        "designated_market_area": null,

        "company": {

            "id": 27669,

            "name": "Example Procore App"

        }

    },

    {

        "id": 20758,

        "name": "Standard Project Template",

        "display_name": "Standard Project Template",

        "project_number": null,

        "address": null,

        "city": null,

        "state_code": null,

        "country_code": null,

        "zip": null,

        "county": null,

        "time_zone": "US/Pacific",

        "latitude": null,

        "longitude": null,

        "stage": "None",

        "phone": null,

        "created_at": "2020-04-03T00:25:02Z",

        "updated_at": "2020-04-03T00:30:01Z",

        "active": true,

        "origin_id": null,

        "origin_data": null,

        "origin_code": null,

        "owners_project_id": null,

        "estimated_value": null,

        "project_region_id": null,

        "project_bid_type_id": null,

        "project_owner_type_id": null,

        "photo_id": null,

        "start_date": null,

        "completion_date": null,

        "total_value": null,

        "accounting_project_number": null,

        "store_number": null,

        "designated_market_area": null,

        "company": {

            "id": 27669,

            "name": "Example Procore App"

        }

    }

]


for (let i = 0; i < data.length; i++) {

  console.log('index', i, data[i]);

}


foreach循环


let data = [

    {

        "id": 20789,

        "name": "Sandbox Test Project",

        "display_name": "1234 - Sandbox Test Project",

        "project_number": "1234",

        "address": "6309 Carpinteria Avenue",

        "city": "Carpinteria",

        "state_code": "CA",

        "country_code": "US",

        "zip": "93013",

        "county": "Santa Barbara County",

        "time_zone": "US/Pacific",

        "latitude": 34.3850438,

        "longitude": -119.4908492,

        "stage": "None",

        "phone": null,

        "created_at": "2020-04-03T00:35:03Z",

        "updated_at": "2020-04-03T00:45:17Z",

        "active": true,

        "origin_id": null,

        "origin_data": null,

        "origin_code": null,

        "owners_project_id": null,

        "estimated_value": null,

        "project_region_id": null,

        "project_bid_type_id": null,

        "project_owner_type_id": null,

        "photo_id": 310560,

        "start_date": null,

        "completion_date": null,

        "total_value": null,

        "accounting_project_number": null,

        "store_number": null,

        "designated_market_area": null,

        "company": {

            "id": 27669,

            "name": "Example Procore App"

        }

    },

    {

        "id": 20758,

        "name": "Standard Project Template",

        "display_name": "Standard Project Template",

        "project_number": null,

        "address": null,

        "city": null,

        "state_code": null,

        "country_code": null,

        "zip": null,

        "county": null,

        "time_zone": "US/Pacific",

        "latitude": null,

        "longitude": null,

        "stage": "None",

        "phone": null,

        "created_at": "2020-04-03T00:25:02Z",

        "updated_at": "2020-04-03T00:30:01Z",

        "active": true,

        "origin_id": null,

        "origin_data": null,

        "origin_code": null,

        "owners_project_id": null,

        "estimated_value": null,

        "project_region_id": null,

        "project_bid_type_id": null,

        "project_owner_type_id": null,

        "photo_id": null,

        "start_date": null,

        "completion_date": null,

        "total_value": null,

        "accounting_project_number": null,

        "store_number": null,

        "designated_market_area": null,

        "company": {

            "id": 27669,

            "name": "Example Procore App"

        }

    }

];


data.forEach(element => {

  console.log(element);

});


查看完整回答
反对 回复 2023-10-20
  • 3 回答
  • 0 关注
  • 127 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信