ActionScript使用稀疏數組,這樣我就可以有一個這樣的數組:如何獲取Actionscript中稀疏數組中元素的數量?
var myArray:Array = new Array();
myArray[0] = "foo";
myArray[22] = "bar";
現在myArray.length會給我23有沒有辦法讓數組中的項目的實際數量不反覆的每一個元素?
ActionScript使用稀疏數組,這樣我就可以有一個這樣的數組:如何獲取Actionscript中稀疏數組中元素的數量?
var myArray:Array = new Array();
myArray[0] = "foo";
myArray[22] = "bar";
現在myArray.length會給我23有沒有辦法讓數組中的項目的實際數量不反覆的每一個元素?
如果你不想通過數組進行迭代,你可以將其過濾:
var myArray:Array = new Array();
myArray[0] = "foo";
myArray[22] = "bar";
var numberOfItems:int = myArray.toString().split(',').filter(isItem).length;
function isItem(item:*, index:int, array:Array):Boolean
{
return item != "";
}
通過使用for
語法,這將迭代definded指標:
public static function definedCount(arr:Array):uint {
var ctr:uint = 0;
for(ix:* in arr)
ctr++;
return ctr;
}
如果你需要經常檢查的項目數在稀疏數組,你應該把它包裝的集合類是獨立跟蹤的項目數。喜歡的東西:
public class IndexedCollection {
private var _arr:Array = [];
private var _itemCount:uint = 0;
public function get count():uint {
return _itemCount;
}
public function getItem(index:uint):* {
return _arr[index];
}
public function setItem(index:uint, value:*):void {
if(_arr[index] === undefined)
_itemCount++;
_arr[index] = value;
}
public function delete(index:uint):void {
if(_arr[index] === undefined)
return;
delete _arr[index];
_itemCount--;
}
}
最快的方法應該是始終使用內置功能。
function myFilter(item:*, index:int, array:Array):Boolean{
if(item)
{
return true;
}else{
return false;
}
}
var myArray:Array = new Array();
myArray[0] = "foo";
myArray[22] = "bar";
trace(myArray.length) // 23
var myMyNewArray:Array = myArray.filter(myFilter)
trace(myMyNewArray .length) // 2
這個工程假設你的對象實際上只是字符串或你寫你的對象一個toString有沒有在它的返回值,也是我不明白你爲什麼會需要使用過濾器逗號,不是嗎只是假設所有空的空格都是空的,而不是空字符串,在這種情況下,Array.toString不會以任何方式顯示它們,因此分割會執行它。我喜歡來自jmh_gr的解決方案,但由於其他對象類型可能存在此缺陷。 – shaunhusain
@shaunhusain是的,有潛在的缺陷。 jmh_gr的'IndexedCollection'示例更加防彈。但OP要求一種方法來獲得沒有迭代的項目數量 - 這當然是一種選擇。過濾器是必要的 - 嘗試運行'toString()。split(',')'沒有它 - 它返回23. – redhotvengeance
啊好吧,因爲內置toString仍然會返回「」爲空,我想? – shaunhusain