根据在 Javascript 中的 for 循环中生成的值过滤对象

克里斯蒂安

我正在创建一个 Javascript 应用程序(没有第三方框架或库),它需要从 JSON 对象获取位置列表并仅显示给定半径内的那些位置。我已经弄清楚如何确定位置的坐标是否在所需的半径内,但我无法弄清楚如何使用这些结果过滤对象。这是相关的代码:

function filterObj(obj) {
    var radiusSize = 100;
    return function filter() {
        var result;
        for (var i in obj) {
            var lat = 41.8781;
            var lon = 87.6298;
            var coordinates = (obj[i].location.[0].coordinates).split(",");
            lat2 = Number(coordinates[0]);
            lon2 = Number(coordinates[1]);
            result = toRadius(getDistance(lat, lon, lat2, lon2)) <= radiusSize;
        }
        return result;
    };
}

function getObj() {
    var xml = new XMLHttpRequest();

    xml.onreadystatechange = function() {
        if (xml.readyState === XMLHttpRequest.DONE) {
            if (xml.readyState === 4 && xml.status === 200) {
                obj = JSON.parse(xml.responseText);
                var ObjFilter = filterObj(obj);
                var filtered = obj.filter(objFilter);
                displayLocations(filtered);
            } else {
              //code to handle errors
            }
        }
    };

    xml.open("GET", "/api/locations.json", true);
    xml.send(null);
}

现在,我知道 filterObj() 由于 for 循环而反复为“result”返回“false”。我试图将 filterObj() 的结果存储为一个数组,但是“result”返回了几个包含“toRadius(getDistance())”结果的数组,我再次知道这是因为 for 循环,但是将“result”赋值移出循环会导致每个结果都是“false”,这是不正确的。

那么,在将该对象传递给“displayLocations()”之前,如何使用“toRadius(getDistance())”在“filterObj()”中生成的结果来过滤我在“getObj()”中获取的对象?

这是我正在使用的对象示例:

[
  {
    "id": 12,
    "name": "Mount Helena City Park",
    "location": [
      {
        "city": "Helena, MT",
        "address": "Mount Helena City Park \nHelena, MT 59601",
        "coordinates": "46.5889179,-112.0593352"
      }
    ]
  }
]
特里科特

你的filterObject函数(它返回一个过滤器函数)不应该得到objas 参数,因为这违背了这种柯里化函数的目的:它obj会以任何方式逐个元素地传递给返回的函数,所以没有必要得到它经过这里。

而是利用这个机会通过所需的半径。然后返回的函数将使用它。

其次,返回的函数将获得一个元素值作为参数:您需要添加该参数并仅使用该值:那里的整个对象不应有循环:这是.filter稍后要做的。

所以它可以像这样工作(为了清楚起见,我重命名了该函数):

function nearerThan(radiusSize = 100) {
    return function filter(obj) {
        var lat = 41.8781;
        var lon = 87.6298;
        var coordinates = (obj.location.[0].coordinates).split(",");
        var lat2 = Number(coordinates[0]);
        var lon2 = Number(coordinates[1]);
        var result = toRadius(getDistance(lat, lon, lat2, lon2)) <= radiusSize;
        return result;
    };
}

function getObj() {
    var xml = new XMLHttpRequest();
    var nearerThan100 = nearerThan(100);

    xml.onreadystatechange = function() {
        if (xml.readyState === XMLHttpRequest.DONE) {
            if (xml.readyState === 4 && xml.status === 200) {
                obj = JSON.parse(xml.responseText);
                var filtered = obj.filter(nearerThan100);
                displayLocations(filtered);
            } else {
                //code to handle errors
            }
        }
    };

    xml.open("GET", "/api/locations.json", true);
    xml.send(null);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在 Javascript 中为循环中生成的每个值创建一个按钮

来自分类Dev

根据对象中的父键过滤对象(JavaScript)

来自分类Dev

根据对象中的父键过滤对象(JavaScript)

来自分类Dev

如何根据javaScript中的条件从对象中删除值

来自分类Dev

根据Javascript中的名称生成颜色

来自分类Dev

根据javascript中的键合并对象

来自分类Dev

根据Javascript中的参数查找嵌套对象

来自分类Dev

Javascript:根据子对象值在数组中获取对象

来自分类Dev

Javascript:根据子对象值在数组中获取对象

来自分类Dev

根据输入值/ javascript过滤数组对象

来自分类Dev

根据JavaScript中的值设置CSS样式

来自分类Dev

根据javascript中的条件分配值

来自分类Dev

javascript根据属性值从数组中删除所有对象

来自分类Dev

JavaScript:在 while 循环中更改对象中的值

来自分类Dev

根据Laravel中for循环中的其他对象获取对象

来自分类Dev

Javascript:根据数组过滤键后,在对象中查找具有最大值的键

来自分类Dev

Javascript:根据对象上嵌套数组中的值在数组中查找对象的索引

来自分类Dev

根据CSV单元格值在JavaScript中插入值

来自分类Dev

根据嵌套值在Javascript中设置复选框值

来自分类Dev

根据javascript中的键值合并两个json对象

来自分类Dev

根据Javascript中的查询字符串创建嵌套对象

来自分类Dev

JavaScript根据键值数组从列表中删除对象

来自分类Dev

如何在JavaScript中根据概率组合对象数组?

来自分类Dev

Javascript根据子集更新对象数组中的特定元素

来自分类Dev

如何根据对象值更改javascript中的颜色

来自分类Dev

如何根据javascript中包含的值获取元素计数

来自分类Dev

根据javascript中的范围滑块值在画布中移动圆

来自分类Dev

提交时,根据 javascript 中的下拉值重定向窗口

来自分类Dev

Javascript:根据值对数组中的相似项进行分组

Related 相关文章

  1. 1

    在 Javascript 中为循环中生成的每个值创建一个按钮

  2. 2

    根据对象中的父键过滤对象(JavaScript)

  3. 3

    根据对象中的父键过滤对象(JavaScript)

  4. 4

    如何根据javaScript中的条件从对象中删除值

  5. 5

    根据Javascript中的名称生成颜色

  6. 6

    根据javascript中的键合并对象

  7. 7

    根据Javascript中的参数查找嵌套对象

  8. 8

    Javascript:根据子对象值在数组中获取对象

  9. 9

    Javascript:根据子对象值在数组中获取对象

  10. 10

    根据输入值/ javascript过滤数组对象

  11. 11

    根据JavaScript中的值设置CSS样式

  12. 12

    根据javascript中的条件分配值

  13. 13

    javascript根据属性值从数组中删除所有对象

  14. 14

    JavaScript:在 while 循环中更改对象中的值

  15. 15

    根据Laravel中for循环中的其他对象获取对象

  16. 16

    Javascript:根据数组过滤键后,在对象中查找具有最大值的键

  17. 17

    Javascript:根据对象上嵌套数组中的值在数组中查找对象的索引

  18. 18

    根据CSV单元格值在JavaScript中插入值

  19. 19

    根据嵌套值在Javascript中设置复选框值

  20. 20

    根据javascript中的键值合并两个json对象

  21. 21

    根据Javascript中的查询字符串创建嵌套对象

  22. 22

    JavaScript根据键值数组从列表中删除对象

  23. 23

    如何在JavaScript中根据概率组合对象数组?

  24. 24

    Javascript根据子集更新对象数组中的特定元素

  25. 25

    如何根据对象值更改javascript中的颜色

  26. 26

    如何根据javascript中包含的值获取元素计数

  27. 27

    根据javascript中的范围滑块值在画布中移动圆

  28. 28

    提交时,根据 javascript 中的下拉值重定向窗口

  29. 29

    Javascript:根据值对数组中的相似项进行分组

热门标签

归档