1

cornerIdobject 内に配列がありますelementMatrixelemArrayその後、 object の配列を作成したいと思います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
....

object の配列のcornerId一部であるarray の n 番目の位置に値を割り当てて値にアクセスしたいと考えています。誰かが値にアクセスする正しい方法を教えてもらえますか???elemArrayelementMatrixcornerId

編集

明確にするために、n 番目の位置に cornerId を追加 (既存の値を上書き) し、それをプッシュしない自由が必要です。また、私はもともとこれを尋ねていませんでしたが、cornerId から n 番目の位置を削除する方法があれば、それは素晴らしいことです。

4

2 に答える 2

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 をプライベートにして、このようにパブリック メソッドを返すことができます (追加は流暢です)。

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'));
于 2012-12-19T07:09:29.783 に答える
2

new Array()まず、 use で配列初期化子を使用しないでください[]。Douglas Crockford のその正当化を参照してください。

function elementMatrix() {
    var cornerId=[];
    return {
        cornerId: cornerId
    };
}
var elemArray=[];
elemArray.push(elementMatrix());
elemArray[0].cornerId.push("z");
elemArray[0].cornerId.push("a");
alert(elemArray[0].cornerId[0]);
alert(elemArray[0].cornerId[1]);
于 2012-12-19T07:08:53.687 に答える