Javascript如果键入数组然后设置它添加到它

时间:2015-01-13 15:56:04

标签: javascript arrays

过去一天我一直在努力解决这个问题,而我似乎无法让它发挥作用。以下代码始终返回false。我尝试了hasOwnPropertytypeof === 'undefined'typeof == 'undefined',我甚至尝试过使用looped_array[major_minor]['sum_sales']。我永远不会得到循环的添加部分。它总是返回false。

为了论证,我们只是说我的任务是在纯JavaScript中执行此操作。我可以在PHP和Python中轻松完成此操作,但我无法使用它们。这很可能是我的问题,我试图使用PHP知识并将其应用于js。我不是一个javascript程序员,但我需要学习。

我需要遍历几千条记录并从中构建一个求和数组。

我的原始数据看起来像

item['net_price_extended']
item['pg_major']
item['pg_minor']

major_minor是这样创建的

var major_minor = item['pg_major'] + '' + item['pg_minor'];

代码我现在正在尝试不起作用

if('sum_sales' in looped_array[major_minor]) {
            console.log("should be true");
            console.log('sum_sales' in looped_array[major_minor]);
            looped_array[major_minor]['sum_sales']            += parseFloat(item['net_price_extended']);
        } else {
            console.log("should be false");
            console.log('sum_sales' in looped_array[major_minor]);
            looped_array[major_minor]['sum_sales']            = parseFloat(item['net_price_extended']);
        }

循环的所有代码

for(r in margin_array) {
        var item = margin_array[r];
        var major_minor = item['pg_major'] + item['pg_minor'];

        looped_array[major_minor] = {};
        looped_array[major_minor]['pg_major']             = item['pg_major'];
        looped_array[major_minor]['major_description']    = item['major_description'];
        looped_array[major_minor]['pg_minor']             = item['pg_minor'];
        looped_array[major_minor]['minor_description']    = item['minor_description'];

        /************************
         * Calculate the totals *
         ************************/

        if(looped_array[major_minor] && looped_array[major_minor]['sum_sales']) {
            looped_array[major_minor]['sum_sales']            += parseFloat(item['net_price_extended']);
        } else {
            looped_array[major_minor]['sum_sales']            = parseFloat(item['net_price_extended']);
        }
}

1 个答案:

答案 0 :(得分:0)

在每次迭代中,您再次覆盖looped_array[major_minor]

looped_array[major_minor] = {};

您应该检查一下是否设置了looped_array[major_minor],这样就不会覆盖整个事情:

for(r in margin_array) {
        var item = margin_array[r];
        var major_minor = item['pg_major'] + item['pg_minor'];


        /************************
         * Calculate the totals *
         ************************/

        if(looped_array[major_minor]) {
            looped_array[major_minor]['sum_sales']            += parseFloat(item['net_price_extended']);
        } else {
            looped_array[major_minor] = {};
            looped_array[major_minor]['pg_major']             = item['pg_major'];
            looped_array[major_minor]['major_description']    = item['major_description'];
            looped_array[major_minor]['pg_minor']             = item['pg_minor'];
            looped_array[major_minor]['minor_description']    = item['minor_description'];

            looped_array[major_minor]['sum_sales']            = parseFloat(item['net_price_extended']);
        }
}