【问题标题】:How to fix Cannot read property 'Latitude' of undefined如何修复无法读取未定义的属性“纬度”
【发布时间】:2020-03-03 12:21:37
【问题描述】:

我的代码不起作用。我需要将数组的值与输入的值进行比较并返回纬度和经度值以便在地图上绘制该点,但只会得到错误无法读取未定义的属性纬度。

var auto1 = [{"Latitude": 42.389, "Longitude": -8.567, title: "test"}];

var digit = document.getElementById('searchmap');
var ret = digit.value;

function search(namek, myarray){
   for(var i=0; i<myarray.length; i++){
      if(myarray[i].title === namek){
         return myarray[i];
       } else{ return false;
       }
    }
 }

var obj = search(ret,auto1);
function showauto(){
     var retu = new google.maps.LatLng(obj.Latitude,obj.Longitude);
     map.setCenter(retu);
 }

我想要 map.setCenter(retu) 工作。谢谢

【问题讨论】:

标签: javascript google-maps


【解决方案1】:

您的search 函数有一个条件返回值。因此,如果数组参数中没有任何项与条件匹配,它将返回 undefined。在尝试引用函数返回值的属性之前,您需要处理这种情况。

编辑:我不愿提供一个可行的示例,因为我不知道您的规范是什么,但这里有一个可行的示例:

function showauto() {
  const obj = search(ret, auto1)
  if (obj) {
    var retu = new google.maps.LatLng(obj.Latitude,obj.Longitude)
    map.setCenter(retu)
  }
}

如果search 返回一个假值,showauto 函数将不会尝试运行映射逻辑。

【讨论】:

  • 这并不是我真正的建议。我建议您在尝试使用之前检查search 的返回值。返回false 将产生与您已经遇到的完全相同的问题。如果函数的返回值不是一个对象,那么你不应该试图把它当作一个对象。
  • @user10381466 namek, myarray 是什么,你能显示更新后的代码吗?
【解决方案2】:

试试这样的:

function search(name, myarray) {
    const foundItem = myarray.find(element => {
        return element.title === name
    })
    return foundItem
}

另外我不太确定你在做什么,但也许你在那个 ret 变量中有错误

var ret = digit.value

您没有为在线函数搜索提供正确的值: var obj = search(ret,auto1) 所以你的搜索函数找不到任何东西,它没有返回任何值,obj 变成 undefined 并且你不能访问 undefined 的属性,因为没有。

【讨论】:

  • 谢谢@ShoeShineBoy。你是对的, ret 变量有错误。我将 var obj = search(ret,auto1) 更改为 var obj = search(digit.value,auto1)。这对我有用
猜你喜欢
  • 2018-01-15
  • 1970-01-01
  • 2016-09-05
  • 2019-12-08
  • 2019-08-19
  • 2021-02-28
  • 2019-11-02
  • 2021-10-03
  • 2021-10-28
相关资源
最近更新 更多