これに似た質問に対する多くの回答が見つかりましたが、実際には何も頭に当たっていません。配列から重複オブジェクトを削除する方法を知っておく必要がありますが、それらを削除する前に元のオブジェクトにその属性の一部を追加する必要があります.jQueryではなく、通常のJavaScriptでこれを行う必要があります。たとえば、私がファーストフード店を経営する場合、売ったハンバーガーの数を知りたい。配列内の重複したオブジェクトを削除しますが、javascriptにいくつかのプロパティを追加してください。
burger[i] = new Food(i, name, price, tax);
私が販売ひとつひとつのとてつもない大ぼらを確認する必要はありませんので、私は配列からの名前を持つすべてが、1つのオブジェクトを削除したい:販売すべてのバーガーは、このような配列という名前のバーガーに食品オブジェクトでありますおまけburger[i].name
しかし、私はまだ私が売った総額と税金を知りたいので、価格と税金を追加したいと思います。さて、私はハンバーガー以上のものを販売していると想像してください。私の最終目標は個々の食べ物を列挙するテーブルであり、総価格と税金です。
私は配列からオブジェクトを削除することを見てきたすべての例は、別のオブジェクトに最初に個々の属性を追加することなく、オブジェクトを削除するようです。前もってありがとうございます。これが混乱したり重複している場合はお詫び申し上げますが、私はこの2時間の答えを探しています。
//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
をコードは二回、このコードを使用して、これらの2つのオブジェクトの配列を作成します(私は、一度ここで配列を、それを入れている:ここで @mwilson
@RayfenWindspearは、私が使用しているオブジェクトのコンストラクタです明らかに別の名前を持っています)。
//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
次に、2つのテーブルを比較し、一致するオブジェクトの配列を作成します。
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
あなたが遭遇するどんなオブジェクトの種類前もって知っていますか、またはそれはあなたのコントロールの外にありますか? – RayfenWindspear
コードを貼り付けて、より迅速で正確な回答を得ることができます。 – mwilson