2017-03-12 9 views
0
var a=[1,2,3]; 
var b=a; 
b.push(4,5); 
console.log(b); 
console.log(a); 

[1,2,3]と値を入力します。しかしそれは印刷[1,2,3,4,5]どのように私はこれを達成することができます。助けてください。事前に感謝しますJavascriptで変数にアクセスするには?

+0

「私は値[1,2,3]」を求めていますか? b? a?どちらも?何か? –

+0

値を[1,2,3]、b値を[1,2,3,4,5]として使用したい。しかし、私は価値を得ています[1,2,3,4,5]。 – user1649134

+0

配列は参照による呼び出しで動作するので(http://stackoverflow.com/questions/6605640/javascript-by-reference-vs-by-value)、concatメソッドを使用して問題を解決する必要があります。既存の配列を変更しなかった新しい配列。解決策:var a = [1,2,3]; b = [] .concat(a); b.push(4,5); console.log(b); console.log(a) – coder

答えて

2

配列のオブジェクト参照を別の1つの変数に割り当てています。しかし、ここでは、配列をコピーして新しいインスタンスを作成します。

var a=[1,2,3]; 
var b= a.slice(0); 
b.push(4,5); 

console.log(b); //[1,2,3,4,5] 
console.log(a); //[1,2,3] 

Array.prototype.sliceに沿って渡された開始値が0あるとき、元の配列のコピーを作成します。しかし、ハードコードされた値を渡すことに本当に関心がある場合は、callのバリアントを使用してください。

var b= [].slice.call(a); 
+1

お返事ありがとうございました。 – user1649134

0

これは、を参照するオブジェクトが「」であるためです。オブジェクトを深くクローンする必要があります。

のは、ビット程度メモリをお話しましょう

var a=[1,2,3];  
var b= JSON.stringify(JSON.parse(a)); 
b.push(4,5);  
console.log(b); //[1,2,3,4,5]  
console.log(a); //[1,2,3] 
+0

申し訳ありません、あなたの答えの "深いクローンニング"の部分を読んでください:p –

+0

@ジャロマンダXええ、これも深いクローニングのための方法です –

0

深いクローニングのためにこれを試してみてください...

a123

ときのアドレスで、例えば、メモリに保存されていますb = aのコードで、123の同じaを参照するだけで、両方が同じplacを持つようになりますメモリ内の電子あなたがそれらのいずれかを変更するときに、あなたが他の を変更...だからあなたは何ができるか

var b= a.slice(0);

これらのいずれかの方法で、あなたの二番目の配列のためのメモリ内の別の場所を作成することですか

var b= JSON.stringify(JSON.parse(a));

又は

var b = [].concat(a);

関連する問題