怎么有人从数组中获取函数参数?

时间:2014-03-29 21:43:48

标签: actionscript-3 actionscript

我在编码方面不是很先进,但我想做这样的事情:

function something(id){
    somethingElse(id);
    anotherThing(id);
}
var sampleArray:Array = [1,2,3];
something(1);
something(2);
something(3);

但是,无论数组有多长,我希望它能一次保持数组中每个项的参数的功能。

有任何帮助吗?

2 个答案:

答案 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]);