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();
})
原文地址:https://www.cnblogs.com/jcjssl/p/9371425.html