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

map()函数小简介

map()函数一直都是我认为比较实用的函数之一,为什么这么说呢?

先来考虑一下,你是否碰到过以下场景:需要遍历一组对象取出每个对象的某个属性(比如id)并且用分隔符隔开

我想你一定有碰到过吧!因为我已经碰到过很多次了,这就是map()函数的一个典型的适用场景

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

map()函数实例

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

jQuery.map()

两者适用起来都非常简单,先拿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()最简单的功能

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

时间: 2024-10-26 03:15:14

jQuery——map()函数以及它的java实现的相关文章

jquery中map函数与each函数的区别

?jquery中的each函数和map函数的用法看起来差不多,但其实还是有一点区别的. ?其中一个重要的区别是,each返回的是原来的数组,并不会新创建一个数组.而map方法会返回一个新的数组.如果在没有必要的情况下使用map,则有可能造成内存浪费. ?例如: var items = [1,2,3,4]; ? $.each(items, function() { alert('this is ' + this); }); var newItems = $.map(items, function(

[hadoop] map函数中使用FileSystem对象出现java.lang.NullPointerException的原因及解决办法

问题描述: 在hadoop中处理多个文件,其中每个文件一个map. 我使用的方法为生成一个文件,文件中包含所有要压缩的文件在HDFS上的完整路径.每个map 任务获得一个路径名作为输入. 在eclipse中调试时,map中处理hdfs上的文件用到的FileSystem对象为整个class中的静态成员变量,在eclipse中运行没有错误,打包成jar提交到集群运行,就会在map函数中 FileStatus fileStatus = tmpfs.getFileStatus(inputdir); 这一

jquery中的each函数和map函数的区别

jquery中的each函数和map函数的用法看起来差不多,但其实还是有一点区别的. 其中一个重要的区别是,each返回的是原来的数组,并不会新创建一个数组.而map方法会返回一个新的数组.如果在没有必要的情况下使用map,则有可能造成内存浪费. 例如: var items = [1,2,3,4];  $.each(items, function() {  alert('this is ' + this);  });  var newItems = $.map(items, function(i

学习JQuery中文文档之map()函数和get()函数

今天学到一个新的函数map(). map(callback) 官方概述: 将一组元素转换成其他数组(不论是否是元素数组) 你可以用这个函数来建立一个列表,不论是值.属性还是CSS样式,或者其他特别形式.这都可以用'$.map()'来方便的建立. 参数: 给每个元素执行的函数 为了让学习者更容易理解这个函数,于是就有了下面这个栗子: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu

jquery Autocomplete函数

<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>jQuery UI Autocomplete - Default functionality</title> <link rel="stylesheet" href="//code.jquery.com/ui/1.11.0

jQuery 遍历函数

.add() 将元素添加到匹配元素的集合中. .andSelf() 把堆栈中之前的元素集添加到当前集合中. .children() 获得匹配元素集合中每个元素的所有子元素. .closest() 从元素本身开始,逐级向上级元素匹配,并返回最先匹配的祖先元素. .contents() 获得匹配元素集合中每个元素的子元素,包括文本和注释节点. .each() 对 jQuery 对象进行迭代,为每个匹配元素执行函数. .end() 结束当前链中最近的一次筛选操作,并将匹配元素集合返回到前一次的状态.

jQuery 遍历函数(w3school)

jQuery 遍历函数包括了用于筛选.查找和串联元素的方法.   函数 描述 .add() 将元素添加到匹配元素的集合中. .andSelf() 把堆栈中之前的元素集添加到当前集合中. .children() 获得匹配元素集合中每个元素的所有子元素. .closest() 从元素本身开始,逐级向上级元素匹配,并返回最先匹配的祖先元素. .contents() 获得匹配元素集合中每个元素的子元素,包括文本和注释节点. .each() 对 jQuery 对象进行迭代,为每个匹配元素执行函数. .en

jQuery遍历函数

jQuery 遍历函数包括了用于筛选.查找和串联元素的方法. 函数 描述 .add() 将元素添加到匹配元素的集合中. .andSelf() 把堆栈中之前的元素集添加到当前集合中. .children() 获得匹配元素集合中每个元素的所有子元素. .closest() 从元素本身开始,逐级向上级元素匹配,并返回最先匹配的祖先元素. .contents() 获得匹配元素集合中每个元素的子元素,包括文本和注释节点. .each() 对 jQuery 对象进行迭代,为每个匹配元素执行函数. .end(

jQuery框架+DWR框架实现的Java Web中的Ajax效果(异步请求,局部刷新)

一 简介和实现效果 这里用一个小例子来简单举例说明,做一个搜索引擎搜索提示效果,通过不断输入字符,然后在下方给出搜索提示.效果图如下: 通过上图可以看到,当输入一个"a"时,提示了很多内容,然后继续输入一个"e"后,提示的范围明显就变小了. 注:在文末我会给出完整源代码的下载链接,以供大家参考 二 具体实现 1 在eclipse for java ee中创建一个Java Web工程,然后导入相应的jar包,特别说明的是:这里要导入一个额外的dwr.jar.也就是说,