Flex Array 的一些有用的操作
我想大家一定都很熟悉Array了吧?我们几乎每天都在和Array 打交道,但是你是否几乎没有注意到Array提供给我们的一些有用的方法呢? 1.Array 的增删改查 1)在数组最后增加一个元素 ? ? var employees:Array = new Array(); employees.push({name:"Employee 1",manager:false}); ? 2)在数组最前面增加一个元素 ? var employees:Array = new Array(); employees.push({name:"Employee 1",manager:false,salary:100}); employees.unshift({name:"Employee 2",manager:true,salary:1000}); employees.unshift({name:"Employee 3",salary:200}); ? ?3)删除数组最后一个元素 ? employees.pop(); ? ?4)删除数组第一个元素 ? employees.shift(); ? ?5)在第二和第三之前插入一个元素 ? employees.splice(1,{name:"Employee 4",manager:false}) ? ?6)删除第三个元素 ? employees.splice(2,1) ? 2.Array的排序 1).反转Array ? employees.reverse(); ? ?2)Array.sort()? 默认情况下,Array.sort() 按以下方式进行排序: 排序区分大小写(Z 优先于 a)。 按升序排序(a 优先于 b)。 修改该数组以反映排序顺序;在排序后的数组中不按任何特定顺序连续放置具有相同排序字段的多个元素。 元素无论属于何种数据类型,都作为字符串进行排序,所以 100 在 99 之前,这是因为 "1" 的字符串值小于 "9" 的字符串值。 Array.NUMERIC 参数实际上没有将其他数据类型转换为 Number 数据类型,它只是允许排序算法识别数字。如果既有数字又有string,则会报错。 你可以用Array.sort(compareFunction,sortOptions) 改变排序行为。 ? protected function application1_creationCompleteHandler(event:FlexEvent):void { var employees:Array = new Array(); employees.push({name:"Employee 1",salary:100}); employees.unshift({name:"Employee 2",salary:1000}); employees.unshift({name:"Employee 3",salary:200}); employees.sort(sortOnSalary); employees.forEach(traceEmployee); employees.sort(sortOnSalary,Array.DESCENDING); employees.forEach(traceEmployee); } private function sortOnSalary(a:Object,b:Object):Number { var aSalary:Number = Number(a.salary); var bSalary:Number = Number(b.salary); if(aSalary > bSalary) { return 1; } else if(aSalary < bSalary) { return -1; } else { //aPrice == bPrice return 0; } } private function traceEmployee(element:*,index:int,arr:Array):void { trace(element.name + " (" + element.manager + " " + element.salary + ")"); } ? 3.Array的过滤 filter 过滤函数对数组中的每一项执行测试函数,并构造一个新数组,其中的所有项都对指定的函数返回 ? employees = employees.filter(callback);
private function callback(item:*,array:Array):Boolean { if(item.name == "Employee 5") { return false; } return true; }? 4.Array的建立 ? var myArr:Array = new Array("one","two","three"); 或者 var myArr:Array = new Array(3); 或者 var numbers:Array = new Array(1,2,3); var letters:Array = new Array("a","b","c"); var numbersAndLetters:Array = numbers.concat(letters); var lettersAndNumbers:Array = letters.concat(numbers); ? ?5.Array的测试 ? every(callback:Function,thisObject:* = null):Boolean如果数组中的所有项对指定的函数都返回 ? var arr1:Array = new Array(1,4); var res1:Boolean = arr1.every(isNumeric); trace("isNumeric:",res1); // true var arr2:Array = new Array(1,"ham"); var res2:Boolean = arr2.every(isNumeric); trace("isNumeric:",res2); // false private function isNumeric(element:*,arr:Array):Boolean { return (element is Number); } ? ?some(callback:Function,thisObject:* = null):如果数组中的任何一项对于指定的函数都返回 ? ? var arr:Array = new Array(); arr[0] = "one"; arr[1] = "two"; arr[3] = "four"; var isUndef:Boolean = arr.some(isUndefined); if (isUndef) { trace("array contains undefined values: " + arr); } else { trace("array contains no undefined values."); } private function isUndefined(element:*,arr:Array):Boolean { return (element == undefined); } ? ?6.Array对每一项的操作 function forEach(callback:Function,thisObject:* = null):void对数组中的每一项执行函数,仅仅是执行而已,不对数组进行修改. ? ? employees.forEach(traceEmployee); private function traceEmployee(element:*,arr:Array):void { trace(element.name + " (" + element.manager + " " + element.salary + ")"); } ?但是如果你在此函数中修改element的其他属性值,那么也会直接改变此数组相应的值. ? private function traceEmployee(element:*,arr:Array):void { trace(element.name + " (" + element.manager + " " + element.salary + ")"); element.name = "kenny"; }? ? function?map(callback:Function,thisObject:* = null):Array?对数组中的每一项执行函数并构造一个新数组,其中包含与原始数组中的每一项的函数结果相对应的项。 ? employees = employees.map(mapTestFunction); private function mapTestFunction(element:*,arr:Array):String { return element.name + "kenny"; } ? 7.Array 的切片 function slice(startIndex:int = 0,endIndex:int = 16777215):Array?返回由原始数组中某一范围的元素构成的新数组,而不修改原始数组。返回的数组包括 ? var letters:Array = new Array("a","c","d","e","f"); var someLetters:Array = letters.slice(1,3); trace(letters); // a,b,c,d,e,f trace(someLetters); // b,c ? ?如果什么参数也没有传,那么就创建此数组的一个副本。 ? 8.Array 与 String 相互转化 Array 转化为 String function join(sep:*):String?将数组中的元素转换为字符串、在元素间插入指定的分隔符、连接这些元素然后返回结果字符串。嵌套数组总是以逗号 (,) 分隔,而不使用传递给 ? var myArr:Array = new Array("one","three"); var myStr:String = myArr.join(" and "); trace(myArr); // one,two,three trace(myStr); // one and two and three ? ?String 转化为 Array function split(delimiter:*,limit:Number = 0x7fffffff):Array?将 String 对象拆分为一个子字符串数组,方法是在所有出现指定 ? var str:String = "abc"; var resultArray:Array = str.split();? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |