如何在Javascript中创建动态数组?

时间:2012-07-17 03:46:08

标签: javascript jquery

我需要动态创建以下数组,例如:

var data = { point: [
              { x:5, y:8 },
              { x:8, y:10},
              ]};

 console.log(data.point[0].x);   // 5  n=0
 console.log(data.point[1].y);   // 10 n=1

在某些时候,我的应用程序需要将数组扩展为2个以上的项目(n = 0,n = 1)。请让我知道如何做到这一点(即n = 9)。

4 个答案:

答案 0 :(得分:2)

您可以使用Array.push方法将元素添加到数组中。

var point = {x:1,y:1};
data.point.push(point);

答案 1 :(得分:1)

您可以像使用此代码一样使用'push'方法

        var data = { point: [
                      { x:5, y:8 },
                      { x:8, y:10},
                      ]};

         console.log(data.point[0].x);   // 5  n=0
         console.log(data.point[1].y);   // 10 n=1

        data.point.push({x:4,y:3});

        console.log(JSON.stringify(data.point));

答案 2 :(得分:0)

你可以这样做:

var data = {'points' : []};

function addPoint(x, y) {
    data.points.push({'x' : x, 'y' : y});
}

function getPoint(index) {
    return data.points[index];
}

addPoint(10, 20);
addPoint(5, 3);

var p = getPoint(1);
alert(p.x + ", " + p.y); //alerts => "5, 3"

这适用于任意数量的点。

<强>更新

清除阵列

function clearPoints() {
    data.points = [];
}

更新2

如果您有一个简单的页面,这些小功能将正常工作。如果这个点处理最终成为更大系统的一部分,那么做这样的事情可能会更好:

var data = {
    'points' : [], 
    addPoint : function(x, y) {
        this.points.push({
            'x' : x, 
            'y' : y
        });
    }, 
    getPoint : function(index) {
        return this.points[index];
    }, 
    clearPoints : function() {
        this.points = [];
    }, 
    removePoint : function(index) {
        this.points.splice(index, 1);
    }
};

使用示例:

alert(data.points.length); // => 0

data.addPoint(1, 2);
data.addPoint(8, 12);
data.addPoint(3, 7);
alert(data.points.length); // => 3

var p = data.getPoint(2); //p = {x:3, y:7};

data.removePoint(1); 
alert(data.points.length); // => 2

data.clearPoints();
alert(data.points.length); // => 0

它可以让您保持点处理更清洁,更容易使用和更新。

答案 3 :(得分:0)

您可以使用所述的push()函数,也可以使用索引在数组中添加其他项目,这是Google Style Guide中首选的。后一种方法确实要求你有一个指向最后一个索引的指针。

  

请注意,因为为数组赋值比使用更快   push()你应该尽可能使用作业。

for(var i=lastIndex; i < numOfNewPoints; i++){
    data.point[i] = {x:4, y:3};
}