JavaScript array cloning

Raggaer

I have this way to make an array

var playerList = [];

exports.player = function(socket, name)
{
    this.id = socket.id;
    this.name = name;
    this.x = 20;
    this.y = 40;

    return this
}

exports.addPlayer = function(data)
{
    playerList.push(data)
}

And I'm adding items to playerList array like this

var client = new player(socket, data);
exports.addPlayer(client);

But I also got a function that makes the following

exports.getSafeList = function(id)
{
    var player_array = playerList.slice();

    for(var i = 0; i < player_array.length; i++)
    {
        if(player_array[i].id != id)
        {
            player_array[i].id = 'unknown';
        }
    }

    return player_array;
}

And now I do the following

exports.getPlayerList = function()
{
    return playerList;
}

console.log(players.getPlayerList())
console.log(players.getSafeList(id))

So far the code is working fine but when I log the 2 functions it seems that getPlayerList variable merges with player_list one, this is the output

When theres just ONE player on the array

[ { id: 'tjvh8XdMtX-o6QYDAAAB', name: 'Raggaer', x: 20, y: 40 } ]

[ { id: 'tjvh8XdMtX-o6QYDAAAB', name: 'Raggaer', x: 20, y: 40 } ]

But when there are more:

[ { id: 'unknown', name: 'Raggaer', x: 20, y: 40 },
  { id: '2-K5At07wLV4BDiAAAAC', name: 'Alvaro', x: 20, y: 40 } ]

[ { id: 'unknown', name: 'Alvaro', x: 20, y: 40 },
  { id: '2-K5At07wLV4BDiAAAAC', name: 'Alvaro', x: 20, y: 40 } ]

As you can see on both arrays id appears as "unknown" when it shouldn't, since I'm not modyfing the playerList array...

Troy Gizzi

The problem is that while Array.prototype.slice() will create a separate copy of the original array, its items will still be references to the same object instances. So modifying an item in one array ends up modifying the corresponding item in the cloned array.

If your items are simple data objects (no functions), this workaround might do the trick for you:

// instead of "var player_array = playerList.slice();"
var player_array = JSON.parse(JSON.stringify(playerList));

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

From Java

Cloning an array in Javascript/Typescript

From Dev

JavaScript defining an array size and cloning from another array

From Dev

Cloning an array with its content

From Dev

Cloning nodes in Javascript

From Dev

Cloning objects in Javascript

From Dev

Javascript - cloning, appending and wrapping

From Dev

Trouble deep cloning an array object

From Dev

Cloning Non enumerable properties in javascript

From Dev

Cloning Non enumerable properties in javascript

From Dev

Cloning an object with Knockout that has an observable array

From Dev

How to get sub array without cloning

From Dev

Javascript cannot unhide element after cloning?

From Dev

Javascript Object Cloning in Higher Order Functions

From Dev

Cloning A JavaScript Object - Including Getters and Setters

From Dev

cloning a moving ball in javascript on a HTML canvas

From Dev

Javascript Object Cloning in Higher Order Functions

From Dev

Increment element Id upon cloning a row in Javascript

From Dev

classList.toggle() not working after cloning in JavaScript

From Dev

Better/faster way for changing React array state than cloning it?

From Dev

Cloning a RAID-1 Array in Linux to a Larger Capacity Drive

From Dev

Better/faster way for changing React array state than cloning it?

From Dev

JavaScript canvas, manually cloning a canvas onto another generates a weird pattern

From Dev

Cloning javascript tags from parent page into child page

From Dev

cloning and clicking on a moving HTML5 Canvas element using Javascript

From Dev

What is happening differently when cloning 1D array and 2D array

From Dev

What is happening differently when cloning 1D array and 2D array

From Dev

Cloning a struct?

From Dev

Cloning ConcurrentHashMap

From Dev

Cloning Repository

Related Related

  1. 1

    Cloning an array in Javascript/Typescript

  2. 2

    JavaScript defining an array size and cloning from another array

  3. 3

    Cloning an array with its content

  4. 4

    Cloning nodes in Javascript

  5. 5

    Cloning objects in Javascript

  6. 6

    Javascript - cloning, appending and wrapping

  7. 7

    Trouble deep cloning an array object

  8. 8

    Cloning Non enumerable properties in javascript

  9. 9

    Cloning Non enumerable properties in javascript

  10. 10

    Cloning an object with Knockout that has an observable array

  11. 11

    How to get sub array without cloning

  12. 12

    Javascript cannot unhide element after cloning?

  13. 13

    Javascript Object Cloning in Higher Order Functions

  14. 14

    Cloning A JavaScript Object - Including Getters and Setters

  15. 15

    cloning a moving ball in javascript on a HTML canvas

  16. 16

    Javascript Object Cloning in Higher Order Functions

  17. 17

    Increment element Id upon cloning a row in Javascript

  18. 18

    classList.toggle() not working after cloning in JavaScript

  19. 19

    Better/faster way for changing React array state than cloning it?

  20. 20

    Cloning a RAID-1 Array in Linux to a Larger Capacity Drive

  21. 21

    Better/faster way for changing React array state than cloning it?

  22. 22

    JavaScript canvas, manually cloning a canvas onto another generates a weird pattern

  23. 23

    Cloning javascript tags from parent page into child page

  24. 24

    cloning and clicking on a moving HTML5 Canvas element using Javascript

  25. 25

    What is happening differently when cloning 1D array and 2D array

  26. 26

    What is happening differently when cloning 1D array and 2D array

  27. 27

    Cloning a struct?

  28. 28

    Cloning ConcurrentHashMap

  29. 29

    Cloning Repository

HotTag

Archive