用簡單的算法實現過濾數據的功能—衆學

phone-->im-->sys_message.htmlhtml

     在模板中執行對應的js,而後將過濾後的數據拿出來渲染:code

  <%
        var dataObj = repeatMsg.showData(data);
        for (var key in dataObj) {
             %>

repeatMsg.showData(data)是主要的過濾方法。htm

var repeatMsg = (function(){
        var repeatObj = {};
        var dataMsg = [],dataMsgApp=[];
        repeatObj.showData = function(data){
            dataMsgApp=[];
            var len = dataMsg.length
            if(len==0 && data.length>0){
                repeatObj.setDataMsg(data);
                return dataMsg;
            }else{
                repeatObj.setDataMsg(data);
                return dataMsgApp;
            }
        };
        repeatObj.setDataMsg = function(data){
            for(var i = 0; i< data.length;i++){
                if(dataMsg.length == 0){
                    dataMsg.push(data[i]);
                }else{
                    var temp = true;
                    for(var j = 0; j< dataMsg.length;j++){
                        var dataMsgkey = repeatObj.getDataKey(dataMsg[j]);
                        var datakey = repeatObj.getDataKey(data[i]);
                        if(dataMsgkey == datakey){
                            temp = false;
                            break;
                        }
                    }
                    if(temp){
                        dataMsg.push(data[i]);
                        dataMsgApp.push(data[i]);
                    }
                }
            }
        };
        repeatObj.getDataKey = function(data){
            var type = data.extra.type;
            if(type == 'ms-0002' || type == "ms-0003"){
                var ms_extra_info = data.extra.ms_extra_info;
                return ms_extra_info.im_group_id+"_"+ms_extra_info.user_code;
            }  
            if(type == 'ms-0001'){
                return data.extra.ms_extra_info.user_code;
            }
            if(type == 'ms-0006'){
                return data.extra.group_id;
            }
            return "";
        };
        return repeatObj;
    })();

  以上代碼的結構爲var k = (function(){})(); 內部function的地位和k等價,因此在頁面未關閉的狀況下,function內部的變量的數據不會被初始化。get

  geiDataKey()方法返回的值爲每一個類型的惟一ID(與主鍵不一樣,由於每生成一條系統消息就會產生一個新的主鍵,可是內容卻極可能是相同的。)io

  setDataMsg()方法是過濾的核心,它進行兩層循環,第一層爲基數,第二層的數據爲過濾後的部分數據;而後將第一層的數據與第二層的數據進行對比,若是發現重複就跳出循環,而且不向dataMsg中添加數據,若是發現沒有重複就向dataMsg中添加數據。function

  showData()方法是返回過濾後的數據,dataMsgApp是在頁面未關閉的狀況下渲染新加入的驗證消息;dataMsgApp在方法執行的時候會被初始化,因此只會有當前發送過來的新的一條驗證消息。而後將此驗證消息與以前dataMsg中的全部驗證消息用一樣的方法進行對比。模板

相關文章
相關標籤/搜索