动作脚本 3. 如何检查数组的当前元素是不是有准确的名称?

Posted

技术标签:

【中文标题】动作脚本 3. 如何检查数组的当前元素是不是有准确的名称?【英文标题】:Action Script 3. How to check if current element of array have exact name?动作脚本 3. 如何检查数组的当前元素是否有准确的名称? 【发布时间】:2014-05-20 22:13:18 【问题描述】:

我有一个数组 myArr,我在其中保存名为 item1, item2, item3... 等的对象。

trace(myArr[myRandomNumber2][myRandomNumber1]);这个随机返回[object Item1][object Item2]

我需要做这样的 If 语句:

 if (myArr[myRandomNumber2][myRandomNumber1] == Item7) 
 //do something 

但这不起作用。我没有收到任何错误,只是没有任何反应。如何查看当前元素名称?

【问题讨论】:

这些对象有属性吗?如果是这样,有多少?或许你可以参考这个compare()-method 如果我使用 trace(myArr[myRandomNumber2][myRandomNumber1]); 它返回 [object Item1] [object Item2] 等等。 compare() 方法是什么? 【参考方案1】:

您不能直接使用相等运算符(=====)比较两个对象。如果您在对象上使用相等运算符,它会查找引用地址。

每次创建新对象时,您的变量(或数组)都会保存新创建对象的引用地址。

Ofc 引用地址不相等,这就是您得到错误结果的原因。您可以通过两种方式比较对象,对我来说,第一种是首选

下面是一个使用 ; 创建对象的类的示例

public class MyObject 

    public var name:String;
    public var info:String;

    public function MyObject(newName:String, newInfo:String) 
        this.name = newName;
        this.info = newInfo;
    

1.定义一个自定义的 compareTo() 方法,

在你的类中添加下一个方法,这里是MyObject

public function CompareTo(otherObject:MyObject):Boolean 
    // check properties and compare each properties
    return (this.name == otherObject.name && this.info == otherObject.info); 
 

这只会在属性相等时返回true。您可以将比较运算符与字符串一起使用。只需使用所有属性扩展上述内容。如果您的属性不公开,请使用 getter 从其他对象获取属性值。对于当前对象,this. 就足够了。

然后在你的代码中,

if (myArr[myRandomNumber2][myRandomNumber1].compareTo(Item7)) 
    //do something 

if (Item7.compareTo(myArr[myRandomNumber2][myRandomNumber1])) 
    //do something 

两者的作用相同。

2。使用 ObjectUtil 类中的 compare() 方法

请先参考this documentation 和上面的解释(附例子)。 然后检查下一条语句

ObjectUtil.compare(myArr[myRandomNumber2][myRandomNumber1], Item7)

这将使用Item 对象中的属性比较两个对象。请注意,如果您有一个类作为属性,这将不起作用。您可以在上述方法中添加depth 选项来进行深度比较。如果你有多态对象,它仍然可能有点不准确。

上述方法的结果是一个整数,要么是-1,要么是0,要么是1。请查看文档以了解这些数字代表什么。您需要0,因为这表示比较的对象都是相等的。

然后是你的代码;

if (ObjectUtil.compare(myArr[myRandomNumber2][myRandomNumber1], Item7) == 0) 
    //do something 

这就是您可以开始正确比较对象的方法。

【讨论】:

【参考方案2】:

默认情况下,未声明的toString() 方法的对象跟踪在输出中写入[object ClassName]。因此,如果我正确理解您的描述,您可以使用:

if (myArr[myRandomNumber2][myRandomNumber1] is Item7) 
    //do something 

如果Item7 不是看起来的类,也不是对存储在数组中的某个对象的引用,也不是intNumberString 等类型的实例,那么您可以声明您的自定义比较函数来比较这些对象,例如:

if(Item7.compare(myArr[myRandomNumber2][myRandomNumber1])) 
    // do someting

Item7的类中:

// ...
public function compare(obj:*):Boolean 
    // your logic here

在任何其他情况下,您的代码都是不正确的。

【讨论】:

以上是关于动作脚本 3. 如何检查数组的当前元素是不是有准确的名称?的主要内容,如果未能解决你的问题,请参考以下文章

如何创建 If 语句以检查数组中的某些对象。 Flash CS5 动作脚本 3

如何检查数组的元素是不是存在于字符串中

Vue3js:如何准确地循环数组 5 次并有条件地检查里面的元素?

在数组迭代期间检查当前元素是不是是最后一个元素

Laravel 5 检查当前 url 是不是匹配动作

如何检查数组是不是包含元素[重复]