Javascript:访问对象内的数组

时间:2012-12-19 07:03:47

标签: javascript arrays javascript-objects

我在对象cornerId中有一个数组elementMatrix。此后,我想创建elemArray,它是对象elementMatrix的数组。但是,我无法访问cornerId的值。

function elementMatrix() {
    var cornerId=new Array();
}

var elemArray=new Array();
elemArray[0]=new elementMatrix();
elemArray[0].cornerId[0]="z"; //if I put elemArray[0].cornerId="z"; then it works for the first element - but then how do I put second element???
elemArray[0].cornerId[1]="a";
alert(elemArray[0].cornerId[0]); // shows undefined
alert(elemArray[0].cornerId[1]); //again undefined
....
Add other elemArray values
....

我想为数组cornerId的第n个位置分配值和访问值,这是elemArray的一部分,它是一个对象elementMatrix的数组。任何人都可以告诉我访问cornerId值的正确方法???

修改

澄清我希望自由在第n个位置添加cornerId(覆盖现有值)而不是推它。另外我最初没有问过这个问题,但是如果有一种方法可以从cornerId中删除第n个位置,那么这将很棒。

1 个答案:

答案 0 :(得分:3)

用这个来定义你的角落,推送数组....就像这样

function elementMatrix() {
    this.cornerId = [];
};
var elemArray = [];
var newMatrix =new elementMatrix();
newMatrix.cornerId.push('z');
newMatrix.cornerId.push('a');
elemArray.push(newMatrix);

alert(elemArray[0].cornerId[0]);
alert(elemArray[0].cornerId[1]);

或者你可以将你的cornerid设为私有并返回这样的公共方法(add is fluent)

function elementMatrix() {
    var cornerId = [];

    return {
        addCornerId: function(id) {
            cornerId.push(id);
            return this;
        },

        getCornerId: function(pos) {
            if(cornerId.length >= pos) {
                return cornerId[pos];
            }

            return null;
        }
    };
};
var elemArray = [];
var newMatrix =new elementMatrix();
newMatrix
    .addCornerId('z')
    .addCornerId('a');
elemArray.push(newMatrix);

alert(elemArray[0].getCornerId(0));
alert(elemArray[0].getCornerId(1));

编辑,如果你想要一个键值对使用一个对象而不是像这样的数组

function elementMatrix() {
    var cornerId = {};
    var nextKey = 0;

    return {
        addCornerId: function(id, key) {
            if(!key && key !== 0) {
                key = nextKey;
            }
            cornerId[key] = id;
            nextKey++;
            return this;
        },

        removeCornerId: function(key) {
            if(cornerId[key]) {
                  delete cornerId[key]
            }

            return this;
        },
        getCornerId: function(key) {
            if(cornerId[key]) {
                return cornerId[key];
            }

            return null;
        }
    };
};
var elemArray = [];
var newMatrix =new elementMatrix();
newMatrix
    .addCornerId('z')
    .addCornerId('a')
    .addCornerId('XXX', 0)
    .addCornerId('YYYY', 'abc');
elemArray.push(newMatrix);

alert(elemArray[0].getCornerId(0));
alert(elemArray[0].getCornerId('abc'));