[英]Why is this object seemingly being accessed when it shouldn't be?
在這個小提琴中 ,數組( ???
)中的第一個對象最終將包含等於Grand Total
對象中的值的值。
我看不到為什么???
的值 都在改變。 為什么是這樣? 數組中的第一位有什么特別之處?
data = [{
"name": "???",
"number": 2,
"value": 3,
"int": 4
}, {
"name": "Kitten",
"number": 342,
"value": 3432,
"int": 334
}, {
"name": "Kitten",
"number": 3306,
"value": 1387,
"int": 1191
}, {
"name": "Cat",
"number": 10263,
"value": 4239,
"int": 3727
}, {
"name": "Name with spaces",
"number": 6770,
"value": 2107,
"int": 2799
}, {
"name": "Jquery",
"number": 9982,
"value": 3535,
"int": 3786
}]
obj = {};
function addToTotalsObject(item, objData) {
//create an object for each object name to store the sum all values in objects with the same name
if ( !! obj[item]) {
//add
obj[item].number += objData.number;
obj[item].value += objData.value;
obj[item].int += objData.int;
} else {
//create
obj[item] = objData;
}
}
for (var i = 0; i < data.length; i++) {
objData = {
"number": data[i].number,
"value": data[i].value,
"int": data[i].int
};
addToTotalsObject(data[i].name, objData);
addToTotalsObject("Grand Total", objData); //object to hold sum of all values in all objects
}
console.log(obj);
在Firefox 39中測試。
當您遇到新鍵時,您不會復制該對象,因此您為第一個條目創建的objData都用於'???'。 條目,並重新用於“總計”條目。 他們兩個都引用完全相同的對象,因此,每次將值添加到“總計”時,都將相同的更改應用於“ ???”。 條目(因為它是同一對象)。
最簡單的解決方案是,每當需要在obj
變量中創建新條目時,都使用您的值創建一個新對象,而不是僅使用傳遞給addToTotalsObject
的對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.