Javascript 通过引用添加两个数组

Javascript 通过引用添加两个数组,javascript,arrays,reference,Javascript,Arrays,Reference,我有两个数组,我实例化为对象。我想把这两个数组连接起来,我想通过引用来实现。有办法做到这一点吗?我知道对象是通过引用的,但这是我所知道的 // array 1 function gdb() { this.data = [{ "id":"AA", "pos": "0" }, { "id":"AB", "pos":"3" } ] ; } // array 2 function xdb()

我有两个数组,我实例化为对象。我想把这两个数组连接起来,我想通过引用来实现。有办法做到这一点吗?我知道对象是通过引用的,但这是我所知道的

// 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"
    }
    ]
    ;
}

要连接数组,只需使用它们的。不过,我不知道你说的“引用”是什么意思。新数组(包含所有值)属性将指向与之前两个单独数组属性相同的对象。但是,如果将新对象指定给旧数组属性,则新数组不会更改,这是不可能的。

数组是对象,默认情况下通过引用传递。我不确定您是否试图将这些函数用作构造函数(看起来是这样的)。这是你需要的吗

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);

您的最佳选择是使用(这将返回一个新数组)。您还可以重复调用
Array.push()
@NullUserException我不确定这是通过引用实现的-请参阅每次实例化
gdb
xdb
对象时,您都将实例化一个新数组。@bfareto数组是通过引用传递的(从某种意义上说,它们不是通过值传递的),但是生成的数组是一个浅拷贝。我是唯一一个对为什么有两个gdb函数感到困惑的人吗?不,您没有更改
data
属性,而是更改数组中的对象。data属性的值是一个对象数组。如果我修改对象,这意味着data属性(一个数组)现在保存不同的数据或不同数据的对象。因此,数据属性现在已被修改。有意义吗?是的,但我认为“保留修改过的对象”是一个更好的措辞,因为从技术上讲,你不修改数组,而是修改数组引用的对象。哦,我明白你想澄清什么了。完全正确的观点。是的,进行修改是因为对象引用,而不是因为正在进行的任何数组引用。这是因为concat()只返回一个新数组,而不是对这两个数组的神奇引用。在查看代码时,很容易忘记这一点。我承认我把自己和我自己的代码搞混了!谢谢你的澄清。。。非常有帮助!