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每个 只能包含一个对象id,因此只有最后一个对象id会保留在ids. id因此,您可以保证在此操作之后您的数组中只有一个实例。

可能有更好的方法来清理您的阵列,但是几乎可以肯定有更好的方法来做您想做的任何事情,而不必首先清理阵列。

于 2013-01-11T20:05:44.953 回答