javascript数组 - 给定键的增量值

时间:2016-03-25 02:09:59

标签: javascript jquery arrays

我有一个动态数组,如果数组中存在键,我试图将值递增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;
    }

3 个答案:

答案 0 :(得分:2)

您正在使用应该使用对象的数组。如果使用对象,则可以将代码重写为:

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;
}, {});

答案 1 :(得分:1)

我认为你应该增加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);

答案 2 :(得分:0)

尝试使用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");

因此,[1]之后的值为2。