Javascript一次更改三个对象的值

Javascript一次更改三个对象的值,javascript,Javascript,这是我的代码,我正在尝试更改packs对象中object的值。但当我输入它时,Javascript会以某种方式更改所有三个不同的对象,它们没有任何共同点。这是唯一一条改变包的线,其余的应该保持不变,但这条线会改变一切。怎么做 console.log(packs[usedPack].levels[level].bestBy) //null console.log(defaultPack.levels[level].bestBy) //

这是我的代码,我正在尝试更改packs对象中object的值。但当我输入它时,Javascript会以某种方式更改所有三个不同的对象,它们没有任何共同点。这是唯一一条改变包的线,其余的应该保持不变,但这条线会改变一切。怎么做

                console.log(packs[usedPack].levels[level].bestBy) //null
                console.log(defaultPack.levels[level].bestBy) //null
                console.log(mainPacks[usedPack].levels[level].bestBy) //null

                packs[usedPack].levels[level].bestBy = nameTyped; //this changes values in three different objects
                //packs[usedPack].levels[level] = nameTyped; //if I type like this, this does change only original object, rest stays the same

                console.log(packs) //nameTyped
                console.log(defaultPack) //nameTyped
                console.log(mainPacks) //nameTyped

编辑:引用确实有问题。我使用的是构造函数,这个函数需要深度复制复杂对象。我正在检查值,我使用了多个循环来复制对象中的所有值,但它没有正常工作。我已经将所有这些都更改为JSON.parse(JSON.stringify()),现在可以使用了。谢谢您的帮助。

这里的问题似乎是您通过引用来分配某个对象

在javascript中,如果您有两个对象,并且像

a = b;
现在每当你改变b,a也会改变。为了避免这种情况,我们使用扩展操作符进行深度克隆

// this now does not reference to b but clones it
a = {...b}
在您的代码中,您可能正在分配一些类似这样的对象<代码>a=b

可能您正在使用相同的对象分配
packs
defaultPack
mainPacks

已更新

@David指出了一件事,那就是如果你有一些复杂的结构(比如对象中的对象),然后你使用扩展操作符克隆它,那么内部对象仍然会引用同一个对象

要解决此问题,为方便起见,您可以使用
lodash
deepclone函数

const clonedeep = require('lodash/clonedeep');
const deepClonedObject = clonedeep(originalObject);

这将进行深度克隆,即使对象嵌套,它们也不会引用同一个对象。

听起来它们引用的是同一个对象。你能提供一个完整的例子来说明这个问题吗?请注意,如果
b
是一个复杂的对象,其中的任何属性都是对对象的引用,
{…b}
仍然会导致这些属性引用相同的对象。