JS之map用法初探

一个项目的时候出现了一个获取品牌列表,并按照首字符的拼音或者英文的首字母A-Z排序的需求,如图所示:

 

由于html页面里面还用到了art-template的模板循环,最开始写出来的时候列表是循环了出来,但是并没有按照A-Z的分组,而是很多A,A,A,很多B,B,B,很多C,C,C,等等,问题困扰了很久,后来经人帮助用map的键值对方法得到了解决。

html代码如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>分类</title>
    <meta name="viewport" content="initial-scale=1, maximum-scale=1">
    <link rel="shortcut icon" href="/favicon.ico">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    <link rel="stylesheet" href="../../css-sui/shop/shopIndex.css">
    <script src="../../js/base/require.js" data-main="../../js-sui/shop/brandClassify"></script>
</head>

<body>

<div class="page-group">
    <div class="page page-current">
        <!--header start-->
        <header class="bar bar-nav headerBar">
        	<a class="icon icon-iconfontback pull-left back"></a>
        	<div class="sousuoInput pull-left" style="width: 65%">
            	<em class="icon icon-iconfontsousuo"></em>
                <input type="text" class="search_mall" placeholder="乐高玩具"/>
             </div>   
               <a href="http://m.gohomeplay.com/toMessageIndex.do" class="info pull-right" external><em class="icon icon-xiaoxi"></em></a> 
               <a href="http://m.gohomeplay.com/cart/toSessionCart.do" class="cart pull-right" external>		        	
		          <em class="icon icon-iconfontgouwuche"></em>
      			</a>
   		</header>
        <!--header end-->
        <div class="content list-container">
            <div class="buttons-tab fixed-tab" data-offset="44">
                <a href="#tab1" class="tab-link active button">分类</a>
                <a href="#tab2" class="tab-link button">品牌</a>
            </div>
            <div class="brandClassifyBox">
                <div class="tabs">
                    <div id="tab1" class="tab active">
                       <div class="classifyBox">
					        <ul class="classifyNav">
					            
					        </ul>
					        <div class="classifyDetail" id="classifyDiv">
					            <div class="box">
					            	<div class="classifyTitle">[本季热卖]</div>
					                <ul class="row">
					                    
					                </ul>
								</div>
					        </div>
					    </div>
                    </div>
                    <div id="tab2" class="tab">
                    	<ul class="anchorUl" id="key-list">
                        	
                        </ul>
                        <div class="list-block contacts-block">
						    <div class="list-group">
						      <ul id="value-list">
						        
						      </ul>
						    </div>
						  </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
<script id="keyTmpl" type="text/html">
{{each}}
 	<li><a href="#{{$value.key}}" class="red" external>{{$value.key}}</a></li>
{{/each}}
</script>
<script id="valueTmpl" type="text/html">
    {{each itemlist as item}}
		<li class="list-group-title" id="{{item.key}}">{{item.key}}</li>
		{{each item.listvalue}}
		<li>
			<div class="item-content" οnclick="window.location='http://m.gohomeplay.com/getProductByBrandId.do?productBrandId={{$value.id}}&brandName={{$value.brandName}}'">
				<div class="item-media"><img src="{{$value.brandLogoUrl}}"/></div>
				<div class="item-inner">
					<div class="item-title" id="{{$value.id}}">{{$value.brandName}}</div>
				</div>
			</div>
		</li>
		{{/each}}
	{{/each}}
</script>
</body>
</html>
页面的JS如下:

require.config({
    paths: {
        "base": "../../js/base/base",
        "secMenu":"../../js/base/secMenu",
        "template": "../../js/base/template"
    }
});

function loadXMLDoc(a,parentId){
    $(".classifyNav li").removeClass("curr");
	 $(".classifyNav li").eq(a).addClass("curr");
	 getChildNode(parentId); 
  }

//获取子类目
function getChildNode(parentId){
	$.ajax({
             type: "GET",
             url: "http://m.gohomeplay.com/service/productCategoryAdapter/getChildNode",
             data: {'parentId':parentId},
             dataType: "json",
             success: function(data){
            	 if (data.code == "0") {
                      $('.box ul').empty();   //清空box ul里面的所有内容
                      var html = ''; 
                      $.each(data.data, function(commentIndex, comment){
                            html += '<li class="col-33" οnclick="window.location=\'teBuyListTwo.do?categoryId='+comment.id+'\'">'+'<img src="'+comment.categoryPicUrl+'" alt=""><span>'+comment.categoryName+'</span></li>';
                      });
                      $('.box ul').html(html);
            	 }
               }
         });
}


define(['base','template'], function (base,template){
	$(function() {
		$(".anchorUl").height($(window).height()*0.8);
		getTopNode();
		getChildNode();
		getProductBrandList();
		$(".sousuoInput input").focus(function(){
			window.location='http://m.gohomeplay.com/teBuy/search_result.html';
		});
	});

    // 获取顶层类目
	function getTopNode (){
		$.ajax({
	             type: "GET",
	             url: "http://m.gohomeplay.com/service/productCategoryAdapter/getTopNode",
	             data: {},
	             dataType: "json",
	             success: function(data){
	            	 if (data.data!=null) {
	                      $('.classifyNav').empty();   //清空resText里面的所有内容
	                      var html = ''; 
	                      $.each(data.data, function(commentIndex, comment){
	                      	   if(commentIndex==0){
	                             html += '<li class="curr" οnclick="loadXMLDoc('+commentIndex+','+comment.id+')">' + comment.categoryName
	                                       + '</li>';
	                             getChildNode(comment.id);
	                           } else{
	                           	html += '<li οnclick="loadXMLDoc('+commentIndex+','+comment.id+')">' + comment.categoryName
	                                       + '</li>';
	                           }         
	                      });
	                      $('.classifyNav').html(html);
	            	   }
                   }
	         });
	}
	
	
	var map = getMap();
	//获取品牌列表
	function getProductBrandList(){
		$.ajax({
			type:"GET",
			url:"http://m.gohomeplay.com/service/product/findProductBrandList",
			data:{},
			dataType:"json",
			success:function(data){
				if(data.code=="0"){
					 $('.list-group ul').empty();   //清空 ul里面的所有内容
	                 var html = ''; 
	                 $.each(data.data, function(commentIndex,comment){
	                     //html += '<li><div class="item-content"><div class="item-media"><img src="'+comment.brandLogoUrl+'"/></div><div class="item-inner"><div class="item-title" id="'+comment.id+'">'+comment.brandName+'</div></div></div></li>';
	                     var key = (comment.brandNameSpell).slice(0,1).toLocaleUpperCase();
	                     var temp = map.get(key);
	                     if(temp!=undefined && temp!=null){
	                    	 temp.push(comment);
	                    	 map.remove(key);
	                    	 map.put(key,temp);
	                     } else{
	                    	 var values = [];
	                    	 values.push(comment);
	                    	 map.put(key,values);
	                     }
	                 });
	                 var keys = [];
	                 var values = [];
	                 map.each(function(key,value,index){     
	                     keys.push({"key":key});
	                     values.push({"key":key,"listvalue":value});
	                 }); 
	                 
	                 $("#key-list").append(template("keyTmpl",keys));
	                 $("#value-list").append(template("valueTmpl",{"itemlist":values}));
				}
			}
		});
	}
});

引用map用法在base.js里面,引用部分代码如下:

getMap=function(){
    	/** 存放键的数组(遍历用到) */    
        var keys = new Array();     
        var map_ = new Object();
        var data = new Object();   
        map_.put = function(key, value) { 
        	if(data[key] == null){     
        		keys.push(key);    
            }
        	data[key] = value;
            map_[key] = value;  
        };  
        map_.keys = function(key, value) { 
        	if(map_[key] == null){     
        		keys.push(key);    
            }
        }; 
        map_.get = function(key) {  
            return map_[key];  
        };  
        map_.remove = function(key) {  
            delete map_[key];  
        };  
        map_.each = function(fn){     
            if(typeof fn != 'function'){     
                return;     
            }     
            var len = keys.length;     
            for(var i=0;i<len;i++){     
                var k = keys[i];     
                fn(k,data[k],i);     
            }     
        };     
        map_.keyset = function() {  
            var ret = "";  
            for(var p in map_) {  
                if(typeof p == 'string' && p.substring(p.length-1) == "_") { 
                    ret += ",";  
                    ret += p.substring(0,p.length-1);  
                }  
            }  
            if(ret == "") {
                return ret.split(","); 
            }else{  
                return ret.substring(1).split(","); 
            }  
        };  
        return map_;  
	 };
具体map用法还有待深究,代码先码在这里咯。



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值