首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在foreach中拼接当前索引?

问如何在foreach中拼接当前索引?
EN

Stack Overflow用户
提问于 2013-05-29 05:58:13
回答 2查看 1.3K关注 0票数 0

我有这个foreach循环来检查冲突,我希望在发生冲突的情况下删除平台(Movieclip)。到目前为止,我已经想出了这个:

代码语言:javascript
复制
if (mcContent.mcPlayer.y + mcContent.mcPlayer.height > platformCloud.y) 
                                {
                                    mcContent.mcPlayer.y = platformCloud.y - mcContent.mcPlayer.height - 1;
                                    jump();
                                    mcContent.removeChild(platformCloud);
                                    //platformsCloud.splice(platformCloud);
                                }

这样做的目的是删除电影剪辑(到目前为止还好),但是没有拼接,当循环再次运行数组时,它仍然在那里。因此,对于注释掉的拼接,有一个小问题,它从数组中删除了所有的movieclips。

如何仅拼接正在检查的当前索引?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-29 07:24:28

.splice()接受起始索引和要删除的项数,而不是要从数组中删除的对象。

参数

startIndex:int -一个整数,它指定数组中开始插入或删除的元素的索引。可以使用负整数指定相对于数组末尾的位置(例如,-1是数组的最后一个元素)。

deleteCount:uint -指定要删除的元素数量的整数。此数字包括在startIndex参数中指定的元素。如果未指定deleteCount参数的值,该方法将删除从startIndex元素到数组中最后一个元素的所有值。如果该值为0,则不会删除任何元素。

您想要这样做:

代码语言:javascript
复制
var index:int = platformsCloud.indexOf(platformCloud);
platformsCloud.splice(index, 1);
票数 1
EN

Stack Overflow用户

发布于 2013-05-29 06:04:18

为什么不创建一个新的要保留的项目数组呢?使用Array.push添加新项目。这实际上可能比修改现有数组更有效。它也不需要跟踪索引(使用Array.splice所需的)。

示例代码:

代码语言:javascript
复制
var keptPlatforms = [];
// do stuff
if (mcContent.mcPlayer.y + mcContent.mcPlayer.height > platformCloud.y) 
{
    mcContent.mcPlayer.y = platformCloud.y - mcContent.mcPlayer.height - 1;
    jump();
    mcContent.removeChild(platformCloud);
} else {
    keptPlatforms.push(platformCloud);
}
// later, after this cycle, use the new Array
platformClouds = keptPlatforms;

现在,platformsCloud.splice(platformCloud)删除所有项的原因是因为第一个参数被强制为整数,因此它等同于platformsCloud.splice(0),即“删除数组末尾的第0个索引项”。而且,这确实清除了数组。

要使用Array.splice,您必须执行以下操作:

代码语言:javascript
复制
// inside a loop this approach may lead to O(n^2) performance
var i = platformClouds.indexOf(platformCloud);
if (i >= 0) {
    platformClouds.splice(i, 1); // remove 1 item at the i'th index
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16802168

复制
相关文章

相似问题

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