Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I pass the value instead of the reference of an array?

I have this structure:

var a = [];
a.push({"level": 1, "column": 4, "parent": "none", "title": "Node 0", "content": "Parintele suprem", "show": "1"});
var b = a;

a.push({"level": 1, "column": 5, "parent": "none", "title": "Node 1", "content": "Parintele suprem", "show": "1"});

console.log(b);

Now the problem is that b has the exact content as a (the content after the second push). This suggest (correct me if I'm wrong) that when I said b = a I actually gave b same reference as a, so whatever I do in a I have in b. The thing is that I need to pass the value. So I have the previews a, value in b.

Edit to make the question more clear: How do I pass the value instead of the reference?

like image 929
zozo Avatar asked Feb 08 '12 09:02

zozo


1 Answers

I think you can use this to copy the value instead of the reference:

var b = a.slice(0);  

EDIT
As the comments have mentioned and it's also mentioned here: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/slice

slice does not alter the original array, but returns a new "one level deep" copy that contains copies of the elements sliced from the original array. Elements of the original array are copied into the new array as follows:

  • For object references (and not the actual object), slice copies object references into the new array. Both the original and new array refer to the same object. If a referenced object changes, the changes are visible to both the new and original arrays.

  • For strings and numbers (not String and Number objects), slice copies strings and numbers into the new array. Changes to the string or number in one array does not affect the other array.

If a new element is added to either array, the other array is not affected.

like image 89
Niklas Avatar answered Oct 09 '22 14:10

Niklas