-1

オブジェクトとしてインスタンス化する2つの配列があります。これらの2つの配列を連結したいので、参照してください。これを行う方法はありますか?オブジェクトが参照によるものであることは知っていますが、それは私が得た限りです。

// array 1
function gdb() {
    this.data = [{
        "id":"AA",
        "pos": "0"
    },
    {
        "id":"AB",
        "pos":"3"
    }
    ]
    ;
}

// array 2
function xdb() {
    this.data = [{
        "id":"CM",
        "pos": "4"
    },
    {
        "id":"CR",
        "pos":"7"
    }
    ]
    ;
}

// arrays combined
function gdb() {
    this.data = [{
        "id":"AA",
        "pos": "0"
    },
    {
        "id":"AB",
        "pos":"3"
    },
    {
        "id":"CM",
        "pos": "4"
    },
    {
        "id":"CR",
        "pos":"7"
    }
    ]
    ;
}
4

2 に答える 2

1

配列を連結するには、concatメソッドを使用するだけです。ただし、「参照による」の意味がわかりません。新しい配列 (すべての値を含む) のプロパティは、以前の 2 つの個別の配列のプロパティと同じオブジェクトを指します。ただし、新しいオブジェクトを古い配列プロパティに割り当てても、新しい配列は変更されません。これはまったく不可能です。

于 2013-01-29T18:39:32.860 に答える
0

配列はオブジェクトであり、デフォルトで参照によって渡されます。これらの関数をコンストラクターとして使用しようとしているかどうかはわかりません (そのように見えます)。これはあなたが必要とするものですか?

function ConstructorOne() {
    this.data1 = [
        {"id":"AA", "pos":"0"},
        {"id":"AB", "pos":"3"}
    ];
}

function ConstructorTwo() {
    // Inheritance 
    ConstructorOne.call(this);

    this.data2 = [
        {"id":"CM", "pos":"4"},
        {"id":"CR", "pos":"7"}
    ];
}

var obj = new ConstructorTwo();
obj.data = obj.data1.concat(obj.data2);

// Delete old ones if not needed - don't otherwise
//delete obj.data1;
//delete obj.data2;

// Making changes to the data property, will also 
// change data1 & data2 from the constructors, proving 
// that data is just a reference of data1 + data2
obj.data[2]['id'] = "PIZZA";
obj.data[1]['id'] = "APPLE";
obj.data[0]['id'] = "LETTUCE";

console.log(obj);
于 2013-01-29T18:48:25.943 に答える