最近做到一个项目有用到,以前做新闻信息排序跟关键字搜索都是由后台完成,然后生成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排序就搞定了HOHO
复制内容到剪贴板
代码:
var tiTlelDataArr:Array=["ccc","bbb","zzz","222","111"]; //按标题正排序 tiTlelDataArr.sort(); //按标题倒排序 //tiTlelDataArr.sort(2); trace(tiTlelDataArr);
其次是关键字搜索
|