首页 > 解决方案 > Bin Counter - 增加一个 javascript 数组

问题描述

我需要做一个垃圾计数器。它将特定于我的数据,但作为示例,我将使用杂货店。我看到了很多增加项目的方法,但这更像是计算 SQL 列中不同条目的数量(我也不擅长)。

假设杂货店想通过收银机计算他们每天售出的商品数量。苹果和牛奶在一天结束时可能有很高的数量,但阵列必须能够从库存中添加元素,即使它们不经常出售。

function onDataBound(e) {
    var grid = $('grid').data('kendoGrid');
    const binCounter = {};
    $.each(grid.items(), function (index, item) {
        var row = dataSource.getByUid($(item).data('uid'));
        var itemName = row.ItemName; // apples, milk, condoms, hammers, etc.
        var soldAs = row.SoldAs; // each, 6-pack, carton, dozen, case, etc.
        var itemColor = row.ItemColor;
        // help needed here
        binCounter[itemName]++;
        binCounter[soldAs]++;
        binCounter[itemColor]++;
    });
    $.each(binCounter, function (index, item) {
        console.log('binCounter[' + index + ']:');
        console.log(item);
    })
};

结果将具有binCounter['apple']binCounter['milk']存储的数量。

标签: javascript

解决方案


您不能增加尚未初始化的 bin。您必须先检查 bin 是否存在。

所以而不是

binCounter[itemName]++;

你需要

if (binCounter[itemName]) {
    binCounter[itemName]++;
} else {
    binCounter[itemName] = 1;
}

由于您需要重复执行此操作,您可以为其编写一个函数:

function increment_bin(binCounter, key) {
    if (binCounter[itemName]) {
        binCounter[itemName]++;
    } else {
        binCounter[itemName] = 1;
    }
}

然后你可以做

increment_bin(binCounter, itemName);
increment_bin(binCounter, soldAs);
increment_bin(binCounter, itemColor);

推荐阅读