我找到了很多与此类似的问题的答案,但没有什么真正击中要害。我需要知道如何从数组中删除重复的对象,但在删除它们之前,将它们的一些属性添加到原始对象中,并且我需要使用常规 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/