显示NaN而不是0英里

时间:2018-07-27 15:54:17

标签: reactjs react-native

我正在尝试使用Geodist计算距离(以英里为单位)。里程是准确计算的。唯一的问题是,当当前位置的经度和纬度与目标位置的经度和纬度相同时,我得到的是“ NaN”而不是0英里。我不确定如何解决此NaN值。我尝试这样做:

  if (item.cLat === item.LatL)
            dist: 0

当当前位置和目的地的经度和纬度相同时,我仍然得到NaN。下面是我的代码和Json文件:

var geodist = require('geodist')
 var dist = geodist({lat: item.cLat, lon:item.cLong}, {lat: item.LatL, lon: item.Long2}, 'mi')
    if (item.cLat === item.LatL)
            dist: 0

return(
    <View style={{ backgroundColor: index %2 ===0? '#ffdfba':'#bae1ff'}} >

  <Text style={styles.AddressSpace} >Miles:{dist}</Text>



               </View>
)

我的Json文件是这样的:

[

{
   "id":"1",
   "fk": 1,
   "addr": "101 test drive",
   "phone": "(951)-955-6200",
   "LatL":"33.123456",
   "Long2":"117.923456",
   "cLat": "33.123456",
   "cLong": "117.923456",

}

]

2 个答案:

答案 0 :(得分:1)

正如注释中已指出的那样,您未使用dist : 0设置dist的值。您使用dist = 0进行设置。 dist : 0仅在将dist设置为对象的属性时才适用,例如:var someObject = { dist : 0 };。为了爱所有神圣的东西,人-弄一些分号。他们没有受伤。

但是我将其作为完整的“答案”(而不是其他注释),因为示例代码中的条件仅用于检查等效纬度。因此,在您的示例中,即使解决了dist : 0问题,对于共享相同纬度的两个位置,即使它们的经度不同,它也会显示零距离。所以你需要有这样的东西:

if (item.cLat === item.LatL && item.cLong === item.Long2) {
    dist = 0;
}

但是如果您仍然 看到NaN,那么最完整的解决方案是仅检查该特定条件。因此,您可以丢弃整个if (item.cLat === item.LatL && item.cLong === item.Long2)并替换为:

if (isNan(dist)) {
    dist = 0;
}

仅供参考,以下是isNaN()函数的链接:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isNaN

答案 1 :(得分:0)

之所以会这样,是因为lat和lon是不是数字的字符串。尝试将其强制为数字,如下所示:

var geodist = require('geodist')
 var dist = geodist({lat: +item.cLat, +lon:item.cLong}, {lat: +item.LatL, lon: +item.Long2}, 'mi')
    if (item.cLat === item.LatL)
            dist: 0

return(
    <View style={{ backgroundColor: index %2 ===0? '#ffdfba':'#bae1ff'}} >

  <Text style={styles.AddressSpace} >Miles:{dist}</Text>



               </View>
)