1

私はこのオブジェクトの配列を持っています

var ArrTdsObjects = [];

function TdMaster(id, HeaderTxt, CurrentIndex, SortOrder, Width, Color, BgColor) {
    this.id = id;
    this.HeaderTxt = HeaderTxt;
    this.CurrentIndex = CurrentIndex;
    this.SortOrder = SortOrder;
    this.Width = Width;
    this.Color = Color;
    this.BgColor = BgColor;
}
        ArrTdsObjects.push(new TdMaster(
                        CurTdID,
                        CurTdInnerTxt,
                        CurTdCellindex,
                        CurTdSortOrder,
                        CurTdWidth,
                        "color", "bgColor"
                                        )
                            );

いくつかのオブジェクト エントリが配列に追加された後

ArrTdsObjectsベースに格納されているオブジェクトの重複を排除したいcurTdID

意味: 大きい方のセル番号がそれを持っている場合、配列内の同じセルの最初のセルはId除外されますid

小さいインデックス番号の配列項目が大きいセル番号に存在する場合、配列に最後に追加された項目が保存されることを意味する場合、それらを削除するにはどうすればよいですか?

4

1 に答える 1

1

配列を 0 から array.length まで繰り返し処理し、オブジェクトを「ハッシュ」に追加します (読み取り: JavaScript ポリモーフィック オブジェクト)。観察:

var objects = [...];
var ids = {};
for (var i = 0; i < objects.length; ++i) { ids[objects[i].id] = objects[i]; }
// Now empty the list and push the non-duplicated objects back into it
objects = [];
// Check hasOwnProperty in case prototypes have been changed
for (var id in ids) { if (ids.hasOwnProperty(id)) { objects.push(ids[id]); } }

idsには、ごとに 1 つのオブジェクトしか含めることができないidため、 の最後のオブジェクトのみidが に残りidsます。idしたがって、この操作の後、配列にはのインスタンスしかないことが保証されます。

配列をクリーンアップするためのより良い方法があるかもしれませんが、そもそも配列をクリーンアップしなくても、何をしようとしていても、ほぼ確実により良い方法があります。

于 2013-01-11T20:05:44.953 に答える