首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何跟踪数组中的对象?

如何跟踪数组中的对象?
EN

Stack Overflow用户
提问于 2013-08-20 11:51:09
回答 2查看 932关注 0票数 1

我需要帮助来跟踪数组中的对象。我已经尝试给每个对象一个arrayIndex变量,所以我可以通过获取表示数组中的索引的var来拼接。

代码语言:javascript
运行
复制
object0.arrayIndex = 0;
object1.arrayIndex = 1;
object2.arrayIndex = 2;
object3.arrayIndex = 3;

但是,如果将对象移动到不同的数组,则这是有问题的。对象将从不同的位置移动,因此需要不断更新arrayIndex变量。

为此,我向每个对象添加了一个静态ID。使用for循环,我检查每个对象是否有我想拼接的相应对象ID。

代码语言:javascript
运行
复制
var objectID:Number = objectArrayTarget.id;
for (var t:int; t<_objectArrayLayer1.length; t++)
{
    if (objectID == _objectArrayLayer1[i].id)
    {
        var indexOfObject:Number = (_objectArrayLayer1.indexOf(_objectArrayLayer1[i]));
    }
}
_objectArrayLayer1.splice(indexOfObject, 1);

虽然这样做有效,但是否有一种更有效的方法来跟踪数组中的对象?对于100+对象,这可能会导致一些减速

这些对象被拼接,然后被推到一个新的数组中。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-20 13:23:55

如果您的“对象将从不同的地方移动”意味着同一对象从一个地方移动到另一个地方,则不需要arrayIndex。

代码语言:javascript
运行
复制
var indexOfObject:Number = _objectArrayLayer1.indexOf(targetObj);

if (indexOfObject >= 0) {

    _objectArrayLayer1.splice(indexOfObject, 1);
}

如果它意味着不同的对象,比如副本,您可以比较一些属性来获得targetObj

代码语言:javascript
运行
复制
for (var t:int = 0; t<_objectArrayLayer1.length; t++)
{
     if (targetObj.id == _objectArrayLayer1[i].id)//assume id is unique key of the object
     {
          break;//i is the index here

     }
}

if (i != _objectArrayLayer1.length) {//find target object

}

如果对象类型有一个唯一的键,比如id,或者您可以使用对象的一些属性,比如name + "_“+ order,创建一个唯一的键,您可以使用字典,就像前面提到的Patel。

代码语言:javascript
运行
复制
var dic:Dictionary = new Dictionary(true);

dic[obj1.id] = obj1;
dic[obj2.id] = obj2;//assume id the unique key,or you can use other key

这样你就能找到像这样的obj

代码语言:javascript
运行
复制
var obj:Object = dic[target.id]
票数 4
EN

Stack Overflow用户

发布于 2013-08-20 12:00:59

而不是使用数组。我认为您应该使用像Hashset这样的Set实现--您将得到固定时间的查找,不需要排序,您可以添加、删除和查找对象。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18334291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档