首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在同一个数组中更改另一个对象时正在更改的Javascript对象

在同一个数组中更改另一个对象时正在更改的Javascript对象
EN

Stack Overflow用户
提问于 2016-02-10 15:15:20
回答 1查看 136关注 0票数 0

当我改变播放者1.pHand (pHand是一个包含对象的数组)时,player.pHand似乎正在被改变。

代码语言:javascript
运行
复制
for(var j = 0; j < 2; j++){


        console.log(cardDeck[deckCounter]);

        player[0].pHand[j] = cardDeck[deckCounter];

        player[0].cardNumber ++;


        console.log(player[0].pHand[j]);

        deckCounter ++;         

    } 


    for(var k = 0; k < 2; k++){


        console.log(cardDeck[deckCounter]);

        player[1].pHand[k] = cardDeck[deckCounter];

        player[1].cardNumber ++;


        console.log(player[1].pHand[k]);
        console.log(player[0].pHand[k]);

        deckCounter ++;         

    } 

为了便于解释,我稍微修改了代码(对于player索引我有一个循环,而不是两个单独的循环),但是每次都会发生相同的结果,最后一组卡片是给每个player对象的。例如,在控制台中,日志通常如下:

卡{套装:“心”,faceValue:"10",值: 10,播放:假,img:"10Heart.png"…}

卡{套装:“心”,faceValue:"10",值: 10,播放:假,img:"10Heart.png"…}

卡{套装:“心”,faceValue:"3",值: 3,播放:假,img:"3Heart.png"…}

卡{套装:“心”,faceValue:"3",值: 3,播放:假,img:"3Heart.png"…}

卡{套装:“黑桃”,faceValue:"J",值: 10,播放:假,img:"JSpade.png"…}

卡{套装:“黑桃”,faceValue:"J",值: 10,播放:假,img:"JSpade.png"…}

卡{套装:“黑桃”,faceValue:"J",值: 10,播放:假,img:"JSpade.png"…}

卡{套装:“黑桃”,faceValue:"K",值: 10,播放:假,img:"KSpade.png"…}

卡{套装:“黑桃”,faceValue:"K",值: 10,播放:假,img:"KSpade.png"…}

卡{套装:“黑桃”,faceValue:"K",值: 10,播放:假,img:"KSpade.png"…}

如有任何帮助或见解,将不胜感激:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-10 15:32:41

Javascript通常在分配变量时使用引用,并且您为播放器的‘s值和属性分配了相同的cardDeck对象。例如:

代码语言:javascript
运行
复制
var pHand = {a:1,b:2};

var player = [];
player[0] = {};
player[1] = {};

player[0].pHand = pHand;
player[1].pHand = pHand; // we assign a REFERENCE here

console.log(player[0].pHand);
console.log(player[1].pHand);

console.log("changing value of b for player 0");
player[0].pHand.b = 3;

console.log(player[0].pHand);
console.log(player[1].pHand);
// both consolel logs above will be identical!

对于“如何克隆”js-对象,您可以查看以下文章:How do I correctly clone a JavaScript object?

只要您的对象是可序列化的(例如,不包含函数而是只包含数组和对象),您就可以使用它创建一个简单、深入的副本:

代码语言:javascript
运行
复制
player[0].pHand = JSON.parse(JSON.stringify(pHand));

完整示例:https://jsfiddle.net/41f07f1a/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35318926

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档