簡體   English   中英

javascript數組 - 給定鍵的增量值

[英]javascript array - increment value at given key

我有一個動態數組,如果密鑰存在於數組中,我試圖將值增加1。 根據我的調試,它正在遞增密鑰並創建第二個鍵/值對。

我的代碼片段:

        for (var i = 0; i < choices.length; i++) {
            console.log(choices[i]);
            if (choices[i].YearTermId == 1) {
                if (!lookup(firstChoice, choices[i].FirstChoiceOptionId)) {
                    firstChoice.push({
                        key: choices[i].FirstChoiceOptionId,
                        value: 1
                    });
                } else {
                    firstChoice[choices[i].FirstChoiceOptionId] = firstChoice[choices[i].FirstChoiceOptionId] + 1;
                }

更多if / else ..

    function lookup( arr, name ) {
        for(var i = 0, len = arr.length; i < len; i++) {
            if( arr[ i ].key === name )
                return true;
        }
        return false;
    }

您正在使用一個應該使用對象的數組。 如果使用對象,則可以將代碼重寫為:

var firstChoice = {};

for (var i = 0; i < choices.length; i++) {
    var firstChoiceOptionId = choices[i].FirstChoiceOptionId;

    if (choices[i].YearTermId == 1) {
        firstChoice[firstChoiceOptionId] = firstChoice[firstChoiceOptionId]
                ? firstChoice[firstChoiceOptionId] + 1
                : 1;

        /* ... */
    }
}

如果您之后需要數據作為數組,只需映射它:

var firstChoiceArray = Object.keys(firstChoice).map(function(key) {
    return {
        key: key,
        value: firstChoice[key]
    };
});

相反,如果您有一個輸入數組並想將其轉換為一個對象進行操作,請減少它:

var firstChoice = firstChoiceArray.reduce(function(result, current) {
    result[current.key] = current.value;

    return result;
}, {});

我認為你應該增加value鍵,如:

firstChoice[choices[i].FirstChoiceOptionId].value ++;

我想將此代碼重寫為:

var firstChoice = {};
for (var i = 0; i < choices.length; i++) {
    if (choices[i].YearTermId == 1) {
        if (!firstChoice[choices[i].FirstChoiceOptionId]) {
            firstChoice[choices[i].FirstChoiceOptionId] = 0;
        }
        firstChoice[choices[i].FirstChoiceOptionId]++;
    }
}
console.log(firstChoice);

嘗試使用Array.map :示例:

var a = [{key:"ab","value":1},{key:"cd","value":1},{key:"ef","value":1}];
a.map(function(item){if(item.key == this){item.value++}}, "cd");

因此,a [1]之后將具有值2。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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