根据API强制转换的另一个数组创建2D数组

问题描述 投票:0回答:1

当前,我正在使用opengeodata和一些公司内部API进行项目。因此,我在这里使用的代码略有更改。

首先,我正在使用Opencagedata Javascript API从地址中获取经/纬度坐标。

        <script>
            function geocode(query){
                $.ajax({
                url: 'https://api.opencagedata.com/geocode/v1/json',
                method: 'GET',
                data: {
                'key': 'MyKey',
                'q': query,
                'no_annotations': 1
                },
                dataType: 'json',
                    statusCode: {
                        200: function(response){  // success
                        var lat = response.results[0]['geometry']['lat'];
                        var lng = response.results[0]['geometry']['lng'];
                        $('#geo_result').text(lat + ' , ' + lng);

之后,我使用另一个内部API来获取有关此位置周围位置的一些信息。让我们称之为POI。得到这些POI后,我使用拼接将三个最接近的POI过滤到经纬度坐标上,并过滤一些特定的关键字。

                        var radius = 1.5;
                        var POI = [];


                        var apiCall = $.get( "CoorpAPI/"+radius+"/around/"+lat+","+lng );
                        apiCall.done(function(result) {
                            var myLoc = result.filter(function(loc) {
                                return loc.id.substr(0, 3) != 'keyword';
                            });



                            $.each(myLoc, function(n, loc) {
                            POI.push(loc.id)
                            })

                            var top3 = POI.slice(0,3);
                            console.log(top3);

现在,我要针对第二个API来运行这三个“ top3” POI [“ AB1234”,“ BC2345”,“ CD3456”],该API将返回位置信息。这些信息应该被写到第二维的同一数组中。

最后我想拥有类似的东西:

[
 0: AB1234
    Location Information: A
    Location Information: B
 1: CD2345
    Location Information: C
    Location Information: D
...
]

我想循环必须看起来像这样,但是我不知道如何调用api并从api返回的“ top3”位置和位置信息中创建2d数组:

                            for (var i=0; i < top3.length; i++) {
                            var apiCall_2 = $.get("CoorpAPI_2"+top3[i]);

                            // ???

                            }
javascript ajax for-loop geo
1个回答
0
投票

如果我对您的理解正确,您想在POI中使用嵌套数组在第二次API调用后添加更多信息。您可以尝试做的一件事是以以下方式push而不是仅loc.id一个数组:

POI.push([loc.id]);

现在您在POI中有一个嵌套数组,而不是单个字符串ID(我猜ID是字符串;也可以是数字)。对于第二个API调用,您可以像这样修改代码:

var apiCall_2 = $.get('CoorpAPI_2'+top3[i][0]);

这样,您使用的ID是嵌套数组中的第一个元素。处理完来自API调用2的所有数据后,您可以将每个数据点分别推入嵌套数组,也可以作为另一个数组,如下所示:

// pushing each data points separately
top3[i].push(dataPoint1);
// ... up to say N data points
top3[i].push(dataPointN);

// adding as an array
top3[i].push([dataPoint1, dataPoint2, dataPointN]);

您的结果将是这样:

[ ["AB1234", "dataPoint1", "dataPoint2"] ]

如果您使用第一种方法,并且像这样

[ [ "AB1234", ["dataPoint1", "dataPointN"] ], ]

如果您使用第二种方法。希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.