动作脚本 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
不是看起来的类,也不是对存储在数组中的某个对象的引用,也不是int
、Number
、String
等类型的实例,那么您可以声明您的自定义比较函数来比较这些对象,例如:
if(Item7.compare(myArr[myRandomNumber2][myRandomNumber1]))
// do someting
在Item7
的类中:
// ...
public function compare(obj:*):Boolean
// your logic here
在任何其他情况下,您的代码都是不正确的。
【讨论】:
以上是关于动作脚本 3. 如何检查数组的当前元素是不是有准确的名称?的主要内容,如果未能解决你的问题,请参考以下文章
如何创建 If 语句以检查数组中的某些对象。 Flash CS5 动作脚本 3