我在编码方面不是很先进,但我想做这样的事情:
function something(id){
somethingElse(id);
anotherThing(id);
}
var sampleArray:Array = [1,2,3];
something(1);
something(2);
something(3);
但是,无论数组有多长,我希望它能一次保持数组中每个项的参数的功能。
有任何帮助吗?
答案 0 :(得分:2)
以下是将function something(array_element)
应用于任意长度数组的方法:
sampleArray.forEach(something);
但是,它不允许你改变数组中的元素(除非它们本身包含对其他项的引用,而你正在改变它)。
参考:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Array.html
示例:
自从我搞乱AS3以来已经有一段时间了。
以下内容应该在AS3类定义中,并提供一个带有Uint和的Vector的公共函数 积累了两个以上的优点:
private var _greater_than_two:Vector<uint>;
private function _append_greater_than_two(item:uint):void {
if (item > 2) {
_greater_than_two.push(item);
}
}
// Ok, We're assuming that the array is strictly typed and full of uints.
public function collect_greater_than_twos(items:Vector<uint>) {
// Append to the class instance _greater_than_two Vector any uint that is greater than two:
items.forEach(_append_greater_than_two);
// Tell us what is inside _greater_than_two now:
trace("The _greater_than_two Vector has " + contents.join(', '));
}
另一个用例可能是有条件地添加到数据库。让我们假设我们正在构建一个MMORPG,你想跟踪一个玩家说“Hodor”的次数。
下面再次假设这是在一个类中(让我们称之为Player):
private _redis:Redis; //assuming you filled this value in the constructor
private _playerName:String;
private function _detect_hodors(action:String):void {
if (action.indexOf('Hodor') > -1) {
_redis.incr(_playerName + 'actions', 1);
}
}
public function process_user_actions(actions:Vector<String>):void {
actions.forEach(_detect_hodors);
// Do other things here...
}
很多公司都希望你在一个简单的for循环中表达上述内容(假设我们正在使用上面的_append_greater_than_twos函数):
function collect_greater_than_twos(items:Array):void {
var index:uint;
var item:uint;
var end:uint = items.length;
for (index=0; index < end; index++) {
item = items[index] as uint;
_append_greater_than_twos(item);
}
}
当我在做AS3时,我们避免使用foreach构造,因为它们比使用bare for循环和索引访问慢得多。从那以后事情可能会发生变化。
答案 1 :(得分:0)
尝试类似:
function something(id):void{
somethingElse(id);
anotherThing(id);
}
var sampleArray:Array = [1,2,3];
something(sampleArray[0]);
something(sampleArray[1]);
something(sampleArray[2]);