JavaScript固定数组或对象长度?

时间:2014-10-22 20:31:46

标签: javascript jquery arrays jvectormap

我需要一种方法只在数组或对象中存储两个值,并将其长度限制为两个值。原因是我使用jQuery Vectormap计算距离和两个坐标之间的绘制线 x1 / y1& X2 / Y2 即可。

每当点击某个地区/国家/地区时,都会加载相应的标记并将其添加到地图

 map.addMarker(id ,{latLng: [val.lat, val.long], name:val.name}) ; ect///

现在,每当点击一个标记时,我应该能够跟踪两个标记的选择计数并将它们的坐标存储在一个数组中然后进行计算。

onMarkerClick:function(e, code){
 var coordinates = map.markers[code].config.latLng;
 // latitude = coordinates[0]
// longitude = coordinates[1]
}

所以,如果我对点击的每个标记使用myArray.push([coordinates[0],coordinates[1]]),那么我最终会得到无数个坐标,从而无法绘制我的线条。

有没有办法将myArray长度设置为2然后当我按下更多值时会覆盖现有的值吗?


感谢

2 个答案:

答案 0 :(得分:1)

如果您想了解它,可以创建执行此操作的自定义类...

function CappedArray(Size)
{
    this.push = function(Value) {
        if(this.length==Size)
        {
            this.shift();
        }
        CappedArray.prototype.push.call(this, Value);
    }
}

CappedArray.prototype = new Array();

//How you use it
var SomeArray = new CappedArray(2);
SomeArray.push([coordinates[0],coordinates[1]]);
...

或者,如果您想强制点只应在连续的插入对中关联这一事实:

function PairArray()
{
    this.push = function(Value) {
        if(this.length==2)
        {
            this.splice(0, 2);
        }
        PairArray.prototype.push.call(this, Value);
    }
}

PairArray.prototype = new Array();

//How you use it
var SomeArray = new PairArray();
SomeArray.push([coordinates[0],coordinates[1]]);

答案 1 :(得分:1)

您可以使用这样的对象:

var coords = 
{
  "c1": [x1,y1],
  "c2": [x2,y2]
}

然后在添加坐标时可以:

coords.c1 = coordinates[0]; 
coords.c2 = coordinates[1];