2014-03-29 76 views
0

我不是在編碼非常先進的,但我想這樣做:某人如何從數組中獲取函數參數?

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

,但我希望它保持功能與每個項目的數組中的一個時間參數無論多久數組是。

任何幫助?

回答

2

這裏是你如何運用function something(array_element)到任意長度的數組:

sampleArray.forEach(something); 

它不會讓你不過陣內變異的元素,(除非他們自己包含對其他項目的引用,並且你正在改變它)。

REF:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Array.html

例子:

,因爲我在做AS3搞砸它已經有一段時間。

以下預計是一個AS3類定義內,並提供一個公開函數,它的uint的矢量和 累積多於兩個的uint:

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」的次數。

的下面,再次,假設這是一個類中(我們稱之爲玩家):

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構造,因爲他們比使用裸for循環和索引訪問慢得多。自那時以來事情可能已經改變了。

+0

你能提供一個用法的例子嗎?我對這些東西不太擅長。 – Darakath

+0

當然可以。回想一下,一個函數的名字就像一個變量。我上面的例子假設你正在使用Vector。 ,但它很容易移植到數組(這實際上只是Vector。<*>'s)。 最終,你可以使用Array.forEach或者簡單地寫一個for循環(示例中顯示) – Ben

+0

謝謝!我得到了它的工作:) – Darakath

0

嘗試類似:

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