Javascript如果在数组中键入,则设置它,否则添加到数组中

Javascript如果在数组中键入,则设置它,否则添加到数组中,javascript,arrays,Javascript,Arrays,在过去的一天里,我一直在努力解决这个问题,但我似乎无法让它发挥作用。下面的代码总是返回false。我试过hasOwnProperty,typeof==='undefined',typeof=='undefined',我甚至试过只使用循环数组[major\u minor]['sum\u sales']。我永远不会得到循环的加法部分。它总是返回false 为了便于讨论,让我们假设我的任务是用纯javascript实现这一点。我可以用PHP和Python轻松地做到这一点,但我不能使用它们。这很可能是我

在过去的一天里,我一直在努力解决这个问题,但我似乎无法让它发挥作用。下面的代码总是返回false。我试过hasOwnProperty,typeof==='undefined',typeof=='undefined',我甚至试过只使用循环数组[major\u minor]['sum\u sales']。我永远不会得到循环的加法部分。它总是返回false

为了便于讨论,让我们假设我的任务是用纯javascript实现这一点。我可以用PHP和Python轻松地做到这一点,但我不能使用它们。这很可能是我的问题,我正在尝试使用PHP知识并将其应用于js。我不是javascript程序员,但我需要学习

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

我的原始数据看起来像

item['net_price_extended']
item['pg_major']
item['pg_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']);
        }
}

在每次迭代中,您将再次覆盖循环数组[major\u minor]:

您应该检查是否设置了循环数组[major\u 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']);
        }
}

我可能误解了这里的问题。一开始你知道所有可能的字段吗?如果你这样做了,你可以在循环之前将它们全部设置为0。我知道所有字段,但出于性能原因,我希望在一个循环中执行此操作,而不是使用两个循环。如果您提供一个完整的代码示例来重新创建此问题,这会有所帮助。我看到TypeError:当我尝试在控制台中的循环数组[major\u minor]中运行“sum\u sales”时,无法使用“in”运算符在循环数组[major\u minor]中搜索“sum\u sales”—但循环数组[major\u minor]['sum_sales']==未定义的作品
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']);
        }
}