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()只返回一个新数组,而不是对这两个数组的神奇引用。在查看代码时,很容易忘记这一点。我承认我把自己和我自己的代码搞混了!谢谢你的澄清。。。非常有帮助!