如果JavaScript中存在数据,则有条件地应用变量

时间:2018-04-09 15:13:48

标签: javascript

对于了解JavaScript的人来说可能是简单的答案,我不太了解它。我正在获取JSON数据并将标记应用于地图。然而,它为那些有空的东西产生了标记,这些标记确实让人感到困惑。所以我需要做的是根据存在的数据创建一个条件变量。我在代码中有以下内容:

let mapElement = document.getElementById('map-banner');
let pointMarkers = mapElement.getAttribute('data-location');
let marked = JSON.parse(pointMarkers);
let bounds = new google.maps.LatLngBounds();
console.log(pointMarkers);

marked.forEach(marked => {
  if (marked.lat > 0 && marked.lat !== null) {
      let lat = marked.lat;
  }
  let lng = marked.lng;

  const marker = new google.maps.Marker({
    position: new google.maps.LatLng(lat, lng),
    map: map,
    icon: '/marker.png',
    title: marked.name
  });
  bounds.extend(marker.position);
});
map.fitBounds(bounds);
};

具体来说,我正在处理变量lat和lng。我也试过了:

let lat = marked.lat;
  if (lat > 0 && lat !== null) {
    const lat = marked.lat;
  }

在这种情况下,它会显示所有数据,并且它似乎不会应用该条件。

3 个答案:

答案 0 :(得分:2)

您有条件地声明变量,对于javascript是可选的。 你想要的是使用一个保护子句跳过循环中的迭代:

marked.forEach(marked => {
    if (marked.lat == null)
        return;

    const marker = new google.maps.Marker({
        position: new google.maps.LatLng(marked.lat, marked.lng),
        map: map,
        icon: '/marker.png',
        title: marked.name
    });
    bounds.extend(marker.position);
});

答案 1 :(得分:2)

我认为过滤器是您正在寻找的。过滤可以从您不想使用的数组中删除条目。

Docs(由MDN提供) - > https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

此外,const / let用于在JavaScript中实现块范围。

consts用于不改变值并且(最好)不可变的变量,参见文档 - > https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/const

let用于值发生变化的值,并且在不同的块范围内具有不同的值,请参阅文档 - > https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let

const mapElement = document.getElementById('map-banner');
const pointMarkers = mapElement.getAttribute('data-location');

// catch any error from JSON.parse
try {
    const coords = JSON.parse(pointMarkers);
    const bounds = new google.maps.LatLngBounds();

    // filter out incorrect coords
    const markers = coords.filter(coord => {
        return (marked.lat > 0 && marked.lat !== null)  
    });

    // create markers, extend bounds
    markers.forEach(({ lat, lng }) => {
        const marker = new google.maps.Marker({
            position: new google.maps.LatLng(lat, lng),
            map,
            icon: '/marker.png',
            title: marked.name
        }); 

        bounds.extend(marker.position);
    });

    // fit bounds
    map.fitBounds(bounds);
} catch (error) {
    // handle error to keep users happy
}

答案 2 :(得分:0)

也许只显示标记是否存在?:

 if(marked.lat && marked.lat > 0) {
    const marker = new google.maps.Marker({
      position: new google.maps.LatLng(lat, lng),
      map: map,
      icon: '/marker.png',
      title: marked.name
   });
}