最近做到一个项目有用到,以前做新闻信息排序跟关键字搜索都是由后台完成,然后生成XML,FLASH再去读,这样由FLASH去LOAD后台程序页面,后台又要去访问数据库,然后排好输出,FLASH等排好了再去读,但是客户要求是苛刻的,他说这样速度上慢很多,要求一定要在FLASH里直接完成,累得我跑来经典请教了各位大虾,最后还是搞定了.大难不死啊。 我把我大概的做法贴出来,大家一起交流下,看还有没更好的办法实现。 成品浏览:http://www.an-ye.cn/Search XML地址为:http://www.an-ye.cn/Search/xml/xml_1.xml
首先是日期排序 我的做法是用sortOn来排,因为sortOn可以按数组中的某种属性来排序,所以我们只要给每个数组元素定义它属性 以及把相应数字赋值给它 这样就可以通过sortOn来排出日期大小的信息了,但是单独的日期是不能直接比较大小的(可能有方法可以比,但是我不知道),所以我是用先比较年,然后比较月,最后比较日的方法做的,然后日期最大的,例如上面的数组有5个元素,每个轮流跟其他4个数组元素比较一下,如果最大的是大于其他4个,那么变量dateNum就dateNum++四次,然后把值赋给这个数组元素DateDataArr[k].Value=dateNum;最后每个数组元素都会得到一个单独的数字,最后我们就可以用DateDataArr.sortOn("Value",2|16);来把这些数组按Value这个元素从大到小或者小到大排列了。具体代码如下,把代码粘贴放到第一帧就输出就可以看到排序效果了,具体代码如下: var DateDataArr:Array=["2008-01-02","2008-05-20","2008-03-13","2008-01-10","2007-01-09"]; for(k=0;k<DateDataArr.length;k++){ var dateNum=0; for(j=0;j<DateDataArr.length;j++){ var YearN=Number(DateDataArr[k].split("-")[0]); var MonthN=Number(DateDataArr[k].split("-")[1]); var dayN=Number(DateDataArr[k].split("-")[2]); var YearNN=Number(DateDataArr[j].split("-")[0]); var MonthNN=Number(DateDataArr[j].split("-")[1]); var dayNN=Number(DateDataArr[j].split("-")[2]); if(YearN>YearNN){ dateNum++; }else if(YearN==YearNN){ if(MonthN>MonthNN){ dateNum++; }else if(MonthN==MonthNN){ if(dayN>dayNN){ dateNum++; } } } } DateDataArr[k].Value=dateNum; } //按日期正排序 DateDataArr.sortOn("Value",2|16); //按日期逆排序 //DateDataArr.sortOn("ValueN",1|16); trace(DateDataArr);
然后是按标题排 按标题比较简单些,直接sort排序就搞定了!具体代码如下: var tiTlelDataArr:Array=["ccc","bbb","zzz","222","111"]; //按标题正排序 tiTlelDataArr.sort(); //按标题倒排序 //tiTlelDataArr.sort(2); trace(tiTlelDataArr);
其次是关键字搜索 首先在场景上做一按钮实例名为btn,一个输入文本实例名为SearchTxt。因为FLASH里提供了indexOf搜索函数(这里感谢下flash023斑竹的提示),indexOf是查询数组用,如果有查到有相关的内容数组.indexOf(SearchTxt.text)的值会为0,否则为-1;所以我们要新建一个新的空数组SearchArr,用来组合所有符合关键字的内容,每搜索到一条符合的内容便push上去,而最后SearchArr这个数组便是我们所搜索出来的东西.具体代码如下: var dataArr:Array=["ccc","bbb","zzz","aaa","aa"]; btn.onRelease=function(){ var SearchArr:Array=new Array(); if(SearchTxt.text!=""){ for(j=0;j<dataArr.length;j++){ if(dataArr[j].indexOf(SearchTxt.text)!=(-1)){ SearchArr.push(dataArr[j]); } } if(SearchArr.length==0){ trace("没有相关信息"); }else{ trace(SearchArr); } } }
|