JS實現HashMap


/**
 * *********  操作實例  **************
 *   var map = new HashMap();
 *   map.put("key1","Value1");
 *   map.put("key2","Value2");
 *   map.put("key3","Value3");
 *   map.put("key4","Value4");
 *   map.put("key5","Value5");
 *   alert("size:"+map.size()+" key1:"+map.get("key1"));
 *   map.remove("key1");
 *   map.put("key3","newValue");
 *   var values = map.values();
 *   for(var i in values){
*       document.write(i+":"+values[i]+"   ");
*   }
 *   document.write("<br>");
 *   var keySet = map.keySet();
 *   for(var i in keySet){
*       document.write(i+":"+keySet[i]+"  ");
*   }
 *   alert(map.isEmpty());
 */

function HashMap(){
    //定義長度
    var length = 0;
    //創建一個對象
    var obj = new Object();

    /**
     * 判斷Map是否為空
     */
    this.isEmpty = function(){
        return length == 0;
    };

    /**
     * 判斷對象中是否包含給定Key
     */
    this.containsKey=function(key){
        return (key in obj);
    };

    /**
     * 判斷對象中是否包含給定的Value
     */
    this.containsValue=function(value){
        for(var key in obj){
            if(obj[key] == value){
                return true;
            }
        }
        return false;
    };

    /**
     *向map中添加數據
     */
    this.put=function(key,value){
        if(!this.containsKey(key)){
            length++;
        }
        obj[key] = value;
    };

    /**
     * 根據給定的Key獲得Value
     */
    this.get=function(key){
        return this.containsKey(key)?obj[key]:null;
    };

    /**
     * 根據給定的Key刪除一個值
     */
    this.remove=function(key){
        if(this.containsKey(key)&&(delete obj[key])){
            length--;
        }
    };

    /**
     * 獲得Map中的所有Value
     */
    this.values=function(){
        var _values= new Array();
        for(var key in obj){
            _values.push(obj[key]);
        }
        return _values;
    };

    /**
     * 獲得Map中的所有Key
     */
    this.keySet=function(){
        var _keys = new Array();
        for(var key in obj){
            _keys.push(key);
        }
        return _keys;
    };

    /**
     * 獲得Map的長度
     */
    this.size = function(){
        return length;
    };

    /**
     * 清空Map
     */
    this.clear = function(){
        length = 0;
        obj = new Object();
    };
}  

在js中具體使用

var fundReconciliation = {}
fundReconciliation.init = function () {
}
var businessList = null;
var buUSmap = new HashMap();
fundReconciliation.init.prototype = {

    //手動對賬彈框
    operatedAccount: function (busOrderNos, finanAmounts) {
        //資金數據
        var finanAmountsList = finanAmounts.split(",");
        var finanAmountsInfo;
        var html = template("finanAmountsList", {"finanAmountsInfo": finanAmountsList})
        $("#finanAmountsListTbody").html(html);

        //業務數據
        for(var i=0;i<businessList.length;i++){
            if ($("#souceCode").val() == 'unigift'){
                buUSmap.put(businessList[i].billsNo.trim(),businessList[i].orderAmount.trim())
            }else{
                buUSmap.put(businessList[i].reportNo.trim(),businessList[i].orderAmount.trim())
            }
        }
        var busHtml = template("businessList", {"businessList": businessList})
        $("#businessListTbody").html(busHtml);
        //$("#operatedAccountModal").modal({show: true});
        sDefiShowMessageSure({message: ""});
    },
    //工會手動確認對賬
    operatedconfirmAccount : function () {
       $("#confirmAccountbuttn").click(function () {
           $("textarea[name='inputBillsNo']").each(function(h,item){
               var amount = $(item.parentNode.parentNode).find("td:nth-child(2)").text().trim();
               var inputBillsNos = item.value.split(",");
               var  isError = false;
               var isPipei = false;
               for(var i=0;i<inputBillsNos.length;i++){
                   if(inputBillsNos[i].trim() == ""){
                       $(item.parentNode).find("span").text("報銷單號/禮包賬單號不能為空");
                   }else {

                       for(var j=0;j<businessList.length;j++){
                           if($("#souceCode").val() == 'unigift'){
                               if(businessList[j].billsNo.trim()==inputBillsNos[i].trim()){
                                   isPipei =true;
                                   break;
                               }
                           }else{
                               if(businessList[j].reportNo.trim()==inputBillsNos[i].trim()){
                                   isPipei =true;
                                   break;
                               }
                           }
                       }
                       if(!isPipei){
                           //直接提示錯誤,清空map,重新添加業務數據
                           new fundReconciliation.init().buUSmapReturn();
                           $(item.parentNode).find("span").text("輸入的報銷單號/禮包賬單號不匹配");
                       }else {
                           if(buUSmap.containsKey(inputBillsNos[i].trim())){
                               if(parseFloat(buUSmap.get(inputBillsNos[i].trim())) == amount){
                                   if(i == inputBillsNos.length -1){
                                       //對賬成功
                                       buUSmap.remove(inputBillsNos[i].trim());//去掉這個單號
                                        if($("textarea[name='inputBillsNo']").length -1 == h){

                                            new fundReconciliation.init().operationSureAccount();
                                            sDefiShowMessage({message: "對賬成功"});
                                            $(this).parents('.sDefi-coverLayer').addClass('f-hide');
                                        }
                                   }else {
                                       //直接提示錯誤,清空map,重新添加業務數據
                                       new fundReconciliation.init().buUSmapReturn();
                                       sDefiShowMessage({message: "報銷單號/禮包賬單號對應的金額不一樣,請重新確認"});
                                       isError = true;
                                       break;
                                   }
                               }else if(parseFloat(buUSmap.get(inputBillsNos[i].trim())) < amount){
                                   if(i != inputBillsNos.length -1){
                                       amount = amount - parseFloat(buUSmap.get(inputBillsNos[i].trim()));
                                       buUSmap.remove(inputBillsNos[i].trim());//去掉這個單號
                                       //inputBillsNos.splice(i, 1);
                                   }else{
                                       //直接提示錯誤,清空map,重新添加業務數據
                                       new fundReconciliation.init().buUSmapReturn();
                                       sDefiShowMessage({message: "報銷單號/禮包賬單號對應的金額不一樣,請重新確認"});
                                       isError = true;
                                       break;
                                   }
                               }else{
                                   buUSmap.put(inputBillsNos[i].trim(),parseFloat(buUSmap.get(inputBillsNos[i].trim())) - amount);
                               }
                           }else{ //如果沒有指定的key
                               //直接提示錯誤,清空map,重新添加業務數據
                               new fundReconciliation.init().buUSmapReturn();
                               //sDefiShowMessage({message: "輸入的報銷單號/禮包賬單號不匹配"});
                               sDefiShowMessage({message: "報銷單號/禮包賬單號對應的金額不一樣,請重新確認"});
                               isError = true;
                               break;
                           }
                       }
                   }
               };
               if(isError){
                   return false;
               }
           });
       })
    },
    buUSmapReturn : function () {
        buUSmap.clear();
        for(var i=0;i<businessList.length;i++){
            buUSmap.put(businessList[i].billsNo.trim(),businessList[i].orderAmount.trim())
        }
    }
}
$(function () {
    var obj = new fundReconciliation.init();
    obj.operatedconfirmAccount();
})

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM