• jQuery——map()函数以及它的java实现


    map()函数小简单介绍


    map()函数一直都是我觉得比較有用的函数之中的一个,为什么这么说呢?

    先来考虑一下。你是否碰到过下面场景:须要遍历一组对象取出每一个对象的某个属性(比方id)而且用分隔符隔开

    我想你一定有碰到过吧!

    由于我已经碰到过非常多次了,这就是map()函数的一个典型的适用场景

    不仅在前台,后台也是(所以后面我在java中也简单实现了这么一个方法)。以下就看看吧


    map()函数实例


    在jQuery中,如.each()一样,.map()函数也有两种形式:一种是提供给jQuery对象用的.map(),另一种是为普通的数组的jQuery.map()


    jQuery.map()


    两者适用起来都很easy。先拿jQuery.map()来说吧,就前面我们提出的场景:比方在easyUI的datagrid中。我们须要实现改变多条记录的状态。那么势必会用checkbox勾选多条记录,而且会将这一组记录的id和须要改动的状态值传到后台。那么得到这一组记录id的过程就是jQuery.map()的一个典型应用,由于通过datagrid.datagrid('getSelections')取出的是一组普通的json数组


    以下的代码实现了批量编辑员工角色:

            var rows = $('#employee_table').datagrid('getSelections');
            if (rows){
            	var empnos = $.map(rows, function(v){
            		return v.empno;
            	}).join(",");
                employee_save_url = "test/editEmployee?

    empnos=" + empnos; $('#employee_dialog').dialog('open').dialog('setTitle','改动员工角色').dialog('center'); }

    这仅仅是map()函数的一个典型应用,它再官网上的定义事实上是:将一个数组中的全部元素转换到还有一个数组中。

    好像是这种。回想上面的样例,就是将一个employee(json)所构成的数组转换成了一个empno(string)构成的数组。

    再看看它的callback函数,在$.map()的callback函数中能够有两个參数。从jQuery1.6開始,第一个是当前遍历到的记录,而第二个则是数字索引,从0開始。

    你应该注意到了,该函数的返回值。将会被映射到终于转换的数组中去。

    须要注意的是,这里的返回值还会有2种特殊情况:

    1、null或者undefined, 用于移除该元素

    2、数组。会将该数组中的元素加入到终于的结果数组中

    关于这2种特殊情况再给出2个实例代码吧:

    	var arr = [{id:0, name:'张三', age: 10}, {id:1, name:'李四', age:12}, {id:3, name:'朱六', age:10}];
    	var value = $.map(arr, function(v){
    		return v.name == '李四' ? null : v.name;// 这里排除李四
    	}).join();
    	alert(value);// 这里的结果是“张三,朱六”
    	
    	value = $.map( [0,1,2], function(n){
       		return [ n, n + 1 ];
    	}).join();
    	alert(value);// 这里的结果是0,1,1,2,2,3 

    这里再补充一个小知识:

    事实上js里已经为array提供了map()函数。且效果与$.map(arr, function (v){})类似

    只是在使用过程中我发现当return null的时候,两者的处理有差别,比方上面的样例中,排除李四,那么结果是“张三。朱六”

    而对于js中的map()函数而言。返回的是“张三,。朱六”。看到了吗?当中的位子还是会被占,至于详细使用哪个就看详细的逻辑了。


    .map()


    这里关于jQuery,map()就讲到这里了。以下是.map()函数,上面说了这个函数是提供给jQuery对象用的,详细怎么使用呢?

    一个常见的需求,比方我们使用了一个对话框来提供一组checkbox,那么当选完之后须要将结果放入原界面,这个时候就须要得到所选的对象了

        <div>
          	青菜豆腐
          <input type="checkbox" value="1" name="dishes">
        </div>
        <div>
        	酸辣土豆丝
          <input type="checkbox" value="2" name="dishes">
        </div>
        <div>
        	红烧鲫鱼
          <input type="checkbox" value="3" name="dishes">
        </div>
        <div>
        	辣子鸡
          <input type="checkbox" value="4" name="dishes">
        </div>
        <script>
        	$(function(){
    		var ids = $(':checkbox:checked').map(function() {
          			return this.value;
        		}).get().join();
        		$('#dishes').val(ids);	// 将选中的dishes保存到表单
        	})
        </script>

    当中函数的核心思想还是一样的。详细多用就会得心应手了!


    map()函数的Java实现


    体会到map()函数的方便了吧?在Java中也好像使用这个方案啊,只是找遍Java API也没有提供类似的工具方法

    那么就响应毛主席的号召,“自己动手,丰衣足食”吧,呵呵~

    详细代码例如以下:

    	public static String map(Collection<?> c, String fieldName) {
    		Field field = null;
    		if (CollectionUtils.isNotEmpty(c)) {
    			Class<?> clazz = c.iterator().next().getClass();
    			try {
    				field = clazz.getDeclaredField(fieldName);
    				field.setAccessible(true);
    				String str = "";
    				for (Object object : c) {
    					Object val = field.get(object);
    					if(val != null){
    						str += "," + val.toString();
    					}
    				}
    				if(isBlank(str)){
    					return null;
    				}
    				return str.substring(1);
    			} catch (Exception e) {
    				System.out.println("fieldName填写有误,该成员变量不存在");
    			}
    		}
    		return null;
    	}

    只是这种方法可和jQuery的map()还是有非常大差距的。这里仅仅是简单的实现了map()最简单的功能

    而无法对获取到的值进行随意的改变。若想实现也能够採用回调接口的方式来做,这里就不再给出代码了,有兴趣的朋友能够试试~




  • 相关阅读:
    jacascript 数组
    jacascript 基础数据类型(一)
    JS checkbox 全选 全不选
    sql 循环处理表数据中当前行和上一行中某值相+/-
    C# 围棋盘的画法
    C 中读取键盘码
    C# string.format、string.connect和+=运算 效率计算
    Sqlserver 中exists 和 in
    urldecode解码方法
    SQL server 临时表
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/6935191.html
Copyright © 2020-2023  润新知