簡體   English   中英

為什么似乎在不應訪問該對象時訪問了該對象?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM