如何更新javascript对象中的值而不覆盖具有相同键的相邻对象

如何更新javascript对象中的值而不覆盖具有相同键的相邻对象,javascript,Javascript,我在使用动态创建的键更新Javascript对象中的嵌套值时遇到一些问题。尝试选择和更新非唯一嵌套键值(在JQuery.each()循环中)时,更新会显示为该键的所有实例设置值 示例对象: var myThing = { uniqueItem1: { key_1: '', key_2: '', key_3: '', }, uniqueItem2: { key_1: '', key_2: '',

我在使用动态创建的键更新Javascript对象中的嵌套值时遇到一些问题。尝试选择和更新非唯一嵌套键值(在JQuery.each()循环中)时,更新会显示为该键的所有实例设置值

示例对象:

var myThing = {
    uniqueItem1: {
        key_1: '',
        key_2: '',
        key_3: '',
    },
    uniqueItem2: {
        key_1: '',
        key_2: '',
        key_3: '',
    },
    uniqueItem3: {
        key_1: '',
        key_2: '',
        key_3: '',
    },
};
无论我如何尝试,更新任何嵌套对象中的非唯一键都会更新具有相同值的其他键

例如:

myThing.uniqueItem1.key_1 = 'original';
myThing.uniqueItem1.key_2 = 'recipe';
myThing.uniqueItem2.key_1 = 'chicken';

console.log(myThing.uniqueItem2.key_1) ==> 'chicken' returned, which is expected
console.log(myThing.uniqueItem1.key_1) ==> 'chicken' returned, when 'original' is expected
我似乎遗漏了一些基本的东西——我更喜欢将索引命名为对象而不是数组,但是如果我必须从另一个角度来处理这个问题,我可以

更新:ಠ_ಠ 所以这个例子就像我想象的那样工作。这意味着问题在于我如何生成这些二级对象

我所做的是从XML文件中读取一组值,为第一级键创建唯一标识符,然后将这些键的值设置为模板对象

简言之:

 var uniqueItemTemplate = {
      key_1: '',
      key_2: '',
      key_3: '',
},
var uniqueStr = 'uniqueItem1';
myThing[uniqueItem1] = uniqueItemTemplate;
所以问题确实是,我没有复制对象,我只是引用它(呃,我需要阅读原型,但我是个小矮人)。相反,我在加载它们的同一个循环中为每个新对象生成了必要的键,这解决了问题

例:


它是有效的。你知道的越多!你确定你的
神话是这样的吗?它不是有效的JavascriptShow您的实际初始化代码,您当前拥有的是无效语法。但是根据您的描述,听起来好像您让每个属性都有相同的对象引用,而不是完全不同的对象。需要查看循环来说明它在做什么。一旦拼写错误被修复,它就会工作:更新为正确的语法,因为整个:而不是=因为我没有校对示例“东西”。哎呀。
var uniqueStr = 'uniqueItem1';
myThing[uniqueStr] = {};
 myThing[uniqueStr]['hub_name'] = '';
 myThing[uniqueStr]['cell_name'] = '';