javascript - 删除数组中的重复对象,但保留在 javascript 中添加一些属性

标签 javascript object

我找到了很多与此类似的问题的答案,但没有什么真正击中要害。我需要知道如何从数组中删除重复的对象,但在删除它们之前,将它们的一些属性添加到原始对象中,并且我需要使用常规 JavaScript 而不是 jQuery 来完成此操作。例如,如果我经营一家快餐店,我想知道我卖了多少个汉堡。每个出售的汉堡都是一个名为 Burger 的数组中的 Food 对象,如下所示:

burger[i] = new Food(i, name, price, tax);

我不需要查看我售出的每一个 whopper,因此我想从数组中删除除一个名称为 whopper burger[i].name 的对象之外的所有对象,但我仍然想要知道我销售的总额和缴纳的税款,所以我想添加价格和税款。现在想象一下,我销售的不仅仅是汉堡,所以我的最终目标是一张表格,列出每种食物及其总价格和税金。

我见过的从数组中删除对象的每个示例似乎都删除了该对象,而没有机会首先将其单独的属性添加到另一个对象。提前致谢,如果这令人困惑或重复,我深表歉意,但我发誓我已经花了两个小时寻找有效的答案。

@RayfenWindspear @mwilson 这是我正在使用的对象构造函数:

    //object constructor for groups
function customGroup(id, name, count, attend, tax, sold, origID) {
    this.ID = id;
    this.cNAME = name;
    this.cCOUNT = count;
    this.cATT = attend;
    this.cTAX = tax;
    this.cSOLD = sold;
    this.cID = origID;
}//Ends function

该代码使用此代码两次创建这些对象的两个数组(我只在这里放置一次,创建的数组显然具有不同的名称):

//loop to create objects from all groups in table 
        for (var i = 0; i < iName.length; i++) {
            name = iName[i].innerHTML;
            count = parseInt(iCount[i].innerHTML);
            //count = Number(count.replace(/[^0-9\.-]+/g,""));
            attend = parseInt(iAttend[i].innerHTML);            
            tax = iTax[i].innerHTML;            
            tax = Number(tax.replace(/[^0-9\.-]+/g,""));
            sold = iSold[i].innerHTML;
            sold = Number(sold.replace(/[^0-9\.-]+/g,""));
            id = iID[i].innerHTML;
            tableNames[i] = new customGroup(i, name, count, attend, tax, sold, id);             
        }//ends for loop

然后我比较两个表并创建一个匹配对象的数组。

 for (var i=0; i < tableNames.length; i++){
            for( var j=0; j < otherTableNames.length; j++){
                if (tableNames[i].cNAME == otherTableNames[j].cNAME){                   
                    count = tableNames[i].cCOUNT + otherTableNames[j].cCOUNT;
                    attend = tableNames[i].cATT + otherTableNames[j].cATT;
                    tax = tableNames[i].cTAX + otherTableNames[j].cTAX;
                    sold = tableNames[i].cSOLD + otherTableNames[j].cSOLD;
                    temp = new customGroup(j, tableNames[i].cNAME, count,        attend, tax, sold, tableNames[i].cID);                 
                    namematch.push(temp);
                }//ends if statement
            }//ends nested loop
        }//ends loop

以下是我尝试删除具有相同名称的项目但保留原始值的方法。

//remove duplicate objects from namematch array   
            for (var i = 0, len = namematch.length; i < len; i++) {
                for (var j = 0, len = namematch.length; j < len2; j++) {                    
                    if (namematch[i].cNAME === namematch[j].cNAME) {                        
                        if ( i != j){
                        namematch[i].cCOUNT = namematch[i].cCOUNT + namematch[j].cCOUNT;
                        namematch[i].cATT = namematch[i].cATT + namematch[j].cATT;
                        namematch[i].cTAX = namematch[i].cTAX + namematch[j].cTAX;
                        namematch[i].cSOLD = namematch[i].cSOLD + namematch[j].cSOLD;                   
                        namematch.splice(j, 1);
                        len2=namematch.length;
                        }//ends if statement
                    }//endsif statement
                }//ends Nested loop
            }//ends forloop

最佳答案

您可能想要做的是,获取您的burger数组,.filter(fn)对于同名的汉堡,然后 .reduce(fn)仅一个条目。

关于javascript - 删除数组中的重复对象,但保留在 javascript 中添加一些属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42588968/

相关文章:

java - 将 java.util.GregorianCalendar.toString() 重新转换回 GregorianCalendar

既不是方法也不是静态的 PHP 类函数

javascript - 为什么 {} + {} 仅在客户端是 NaN?为什么不在 Node.js 中?

javascript - store.fetch 不是函数 (dojo)

javascript - TinyMCE 拼写检查器

android - 从 webservice 对象获取数组项到 android

javascript - 使用 JavaScript 和 lodash 汇总对象数组数据的最佳方法

java - JNI : Invoke JAVA method from C++, 返回对象、引用和 GC

javascript - 展平 JavaScript 数组——为什么这不起作用?

javascript - 我应该在 html 中插入什么以便在代码验证器中可以使用?