【问题标题】:Create 2D Array out of another Array which is casted against an API从针对 API 投射的另一个数组创建 2D 数组
【发布时间】:2020-04-09 19:55:59
【问题描述】:

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

首先,我使用 Opencagedata Javascript API 从地址中获取 lat/lng 坐标。

<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 后,我使用 splice 将三个最近的 POI 过滤到 lat/lng 坐标并过滤一些特定关键字。

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”]。

这些信息应该被写入到第二个第二维的同一个数组中。

最后我想要的东西是这样的:

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

我猜循环看起来应该有点像这样,但我不确定如何调用 API 并从“top3”位置和 api 返回的位置信息中创建一个二维数组:

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

    // ???
}

【问题讨论】:

  • 最后一个 sn-p }) 出现语法错误,不匹配。 JS 中实际上不存在二维数组,但存在嵌套数组,所以是的,您可以将 $.get 的输出存储在目标数组中的循环内,因此只需将结果附加到二维数组即可。

标签: javascript ajax for-loop geo


【解决方案1】:

如果我对您的理解正确,您想在第二次 API 调用后使用 POI 内的嵌套数组来添加更多信息。您可以尝试的一件事是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"] ], ]

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

【讨论】:

    猜你喜欢
    • 2021-03-30
    • 1970-01-01
    • 2012-12-16
    • 2017-05-06
    • 2013-08-21
    • 1970-01-01
    • 2018-02-13
    • 1970-01-01
    • 2020-10-02
    相关资源
    最近更新 更多