如何比较和更改其中一个的值

时间:2015-08-04 13:06:45

标签: javascript

我有不同的标记。 对于其中一些,经度或纬度是相同的。

对于任何标记,如果它具有相同的经度或纬度,与其他标记相比,我想增加其纬度大小。

但最后我最终改变了所有标记的坐标

你能告诉我如何解决这个问题吗?

This is my fiddle

这是我的代码

function checkifgotsameLatitude(response , lator,lotor)
{
    var a = 0;
    for(var i=0;i<response.length;i++)
    {
       var latitusevalue =  response[i].latitude;
           var longitude =  response[i].longititude;
        if(latitusevalue==lator || lotor==longitude)
        {
            a++;
        }
    }
    return a ;
}

3 个答案:

答案 0 :(得分:1)

我看了你的小提琴,我认为解决方法是将项目N与索引大于N的其他项目进行比较。你可以通过将起始索引传递给checkifgotsameLatitude函数来实现。< / p>

function checkifgotsameLatitude(response , lator,lotor, startIndex)
{
    for(var i=startIndex;i<response.length;i++)
    {
       var latitusevalue =  response[i].latitude;
           var longitude =  response[i].longititude;
        if(latitusevalue==lator || lotor==longitude)
        {
            return true;
        }
    }
    return false;
}

更新了fiddle

编辑:当找到第一个匹配项时,该函数现在可以返回。这会加快速度。更新了fiddle

答案 1 :(得分:1)

如果您希望在差异小于0.0001或类似

时将一个经销商与另一个经销商抵销,则此方法有效

fiddle

function normaliseLat(num) {
    var numDecimals = 4; // precision
    return String(num.toFixed(numDecimals)).replace(".", "_");
}

function diffLng(lng, pos, response) {
    return Math.abs(response[pos].longitude - lng)
}

    var lats = [];
    for (var i = 0; i < response.length; i++) {
       var lat = parseFloat(response[i].latitude);
       var lng = parseFloat(response[i].longitude);
       var norm = normaliseLat(lat);
       var pos = lats.indexOf(norm);
       if (pos!=-1) { // found
         if (diffLng(lng,pos,response) < 0.0002) {
           lat = parseFloat(lat)+0.00001;
         }
       }
       lats[i]=norm;

答案 2 :(得分:0)

似乎没有考虑到的一点是,在移动标记后,然后匹配另一个标记。或者,如果您有两个以上的重叠标记,除了一个之外的所有标记都会移动到同一个新位置。我也将“或相同”更改为“和相同”,因为该部分对我没有意义,假设您正在尝试调整它们以使它们不重叠。但当然可以轻易改变。我还改变了浮点等式以使用范围。

我认为这可以纠正这些问题:

Fiddle

while(checkifgotsameLatitude(response,lat,lng))
{
    lat = lat+0.222;
    response[i].latitude = lat;
}

function checkifgotsameLatitude(response , lator,lotor)
{
    var a = 0;
    for(var i=0;i<response.length;i++)
    {
       var latitusevalue =  Math.abs(parseFloat(response[i].latitude) - lator) < 0.1;
       var longitude =  Math.abs(parseFloat(response[i].longititude) - lotor) < 0.1;
        if(latitusevalue && longitude)
        {
            a++;
        }
    }
    return a > 1;
}