我有一个关联数组,其中键是字符串,值是整数数组。
{"Remebering":[0,0,0,0,0,0,0,0,0,0,0],
"Understanding":[0,0,0,0,0,0,0,0,0,0,0],
"Analyzing":[0,0,0,0,0,0,0,0,0,0,0]}
我循环遍历每个对象,然后更新数组中的值。
var rigorLabels = $('.subHeader', standardsTable);
var itemCounts = new Array($('.itemTypeLabel', standardsTable).length);
for (var i = 0; i < itemCounts.length; i++)
{
itemCounts[i] = 0;
}
var rigorArray = [];
for (var i = 1; i < rigorLabels.length; i++)
{
rigorArray[rigorLabels[i].innerHTML.toString()] = itemCounts;
}
$('.itemTypeLabel', standardsTable).each(function (itemIndex)
{
itemTypes += '"' + $(this).html() + '",';
var itemTypeName = $(this).html().replace(' ', '').replace('/', '');
$('.subHeader:not(:First)', standardsTable).each(function() {
var rigorName = $(this).html().toString();
var itemInput = $('#' + $(this).html() + '_' + itemTypeName + '_input');
if(typeof (itemInput.attr('value')) != 'undefined' && itemInput.attr('value') != '')
rigorArray[rigorName][itemIndex] = parseInt(itemInput.attr('value'));
});
});
除非我点击代码更新rigorArray,否则一切似乎都在上面的代码中工作。此时我应该更新单个对象和整数数组中的单个值。我遇到的问题是它正在更新所有对象。因此,如果我正在尝试更新Remembering对象的2位置,则更新会将值设置为所有对象的第二个位置,而不仅仅是记住。
答案 0 :(得分:0)
这是正常的JS工作。 在JS存在对象(对象,数组)之间的引用。 这就是为什么你必须制作对象的递归副本(创建新的对象/数组),以防止链接。 在我们的例子中,您可以使用&#34; concat&#34;功能
此处示例:http://jsfiddle.net/0a46s334/
enter code here