0

I want to push an object into 2 arrays but my problem is the push only add reference
here is my object:

minigroup = {
    "Id": response[0].Id,
    "MemberId": response[0].MemberId,
    "NotMemberId": response[0].NotMemberId
}

I'm using this to test:

groupCache.push(minigroup);
groupCache[0].MemberId = [0, 0, 0, 0, 0];
groupCacheOriginal.push(minigroup);

console.log("cache: " + groupCache[0].MemberId);
console.log("original: " + groupCacheOriginal[0].MemberId);

log results are:
cache: 0,0,0,0,0
original: 0,0,0,0,0

how to avoid this?

Kukher
  • 3
  • 2
  • Just clone the object. http://stackoverflow.com/questions/122102/what-is-the-most-efficient-way-to-clone-an-object – fafl Mar 07 '16 at 09:13

4 Answers4

0

groupCache.push(Object.create(minigroup));
groupCache[0].MemberId = [0, 0, 0, 0, 0];
groupCacheOriginal.push(minigroup);

console.log("cache: " + groupCache[0].MemberId);
console.log("original: " + groupCacheOriginal[0].MemberId);
saikumar
  • 1,041
  • 6
  • 10
  • use Object.create() before pushing, these will create new ref instead of sending original ref – saikumar Mar 07 '16 at 09:14
  • is this better than `groupCacheOriginal.push($.extend({}, minigroup));`? – Kukher Mar 07 '16 at 09:18
  • yes, for your statement you need jQuery plugin also, but for Object.create is pure javascript and support for good performance – saikumar Mar 07 '16 at 09:20
0
groupCache.push(minigroup);
groupCache[0].MemberId = [0, 0, 0, 0, 0];

var newMiniGroup = JSON.parse(JSON.stringify(json_original));
groupCacheOriginal.push(newMiniGroup);

console.log("cache: " + groupCache[0].MemberId);
console.log("original: " + groupCacheOriginal[0].MemberId);    
0

Don't assign memory to the object and use it as a method rather than object

var minigroup = function(){
    return {
        "Id": response[0].Id,
        "MemberId": response[0].MemberId,
        "NotMemberId": response[0].NotMemberId
    };
}

Now try

groupCache.push(minigroup());
groupCache[0].MemberId = [0, 0, 0, 0, 0];
groupCacheOriginal.push(minigroup());

console.log("cache: " + groupCache[0].MemberId);
console.log("original: " + groupCacheOriginal[0].MemberId);
gurvinder372
  • 66,980
  • 10
  • 72
  • 94
0

Just be aware of that, Object.create is not working in IE8 and under. See also in How do I correctly clone a JavaScript object?

Community
  • 1
  • 1
wan rui
  • 36
  • 4