• 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();
    })
    
  • 相关阅读:
    第六次上机作业
    NOIP2016 DAY1 T2天天爱跑步
    NOIP2009 T2 Hankson的趣味题
    NOIP2013 DAY2 T3火车运输
    线段树
    NOIP2012 DAY2 T2借教室
    NOIP2015 DAY2 T1跳石头
    NOIP2016 DAY2 T3 愤怒的小鸟
    文本编辑常用快捷键
    洛谷P1516 青蛙的约会
  • 原文地址:https://www.cnblogs.com/jcjssl/p/9371425.html
Copyright © 2020-2023  润新知