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()最简单的功能

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

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

  1. JQuery map()函数

    DOM.map(callback(index,domElement)); 对匹配元素执行函数对象. 返回值是 jQuery 封装的数组,使用 get() 来处理返回的对象以得到基础的数组. 返回数据类 ...

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

    今天学到一个新的函数map(). map(callback) 官方概述: 将一组元素转换成其他数组(不论是否是元素数组) 你可以用这个函数来建立一个列表,不论是值.属性还是CSS样式,或者其他特别形式 ...

  3. JQuery的隐式迭代和each函数和map函数

    1.JQuery选择器选择出来的是一个数组对象,可是给这些每一个元素都要设置内容时,就会隐式迭代,JQuery自己实现内部循环给每个元素绑定上设置. 2.如果是获取的话,那就是默认获取第一个元素的值. ...

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

    问题描述: 在hadoop中处理多个文件,其中每个文件一个map. 我使用的方法为生成一个文件,文件中包含所有要压缩的文件在HDFS上的完整路径.每个map 任务获得一个路径名作为输入. 在eclip ...

  5. jQuery 源码分析(五) map函数 $.map和$.fn.map函数 详解

    $.map() 函数用于使用指定函数处理数组中的每个元素(或对象的每个属性),并将处理结果封装为新的数组返回,该函数有三个参数,如下: elems Array/Object类型 指定的需要处理的数组或 ...

  6. jQuery 遍历函数

    转载http://www.cnblogs.com/tylerdonet/archive/2013/04/05/3000618.html jQuery 遍历函数包括了用于筛选.查找和串联元素的方法. 函 ...

  7. STL : map函数的运用 --- hdu 4941 : Magical Forest

    Magical Forest Time Limit: 24000/12000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Other ...

  8. jQuery 遍历函数(w3school)

    jQuery 遍历函数包括了用于筛选.查找和串联元素的方法.   函数 描述 .add() 将元素添加到匹配元素的集合中. .andSelf() 把堆栈中之前的元素集添加到当前集合中. .childr ...

  9. Jq_Ajax 操作函数跟JQuery 遍历函数跟JQuery数据操作函数

    JQuery文档操作方法 jQuery 库拥有完整的 Ajax 兼容套件.其中的函数和方法允许我们在不刷新浏览器的情况下从服务器加载数据. 函数                             ...

随机推荐

  1. centos编译ffmpeg x264

    1.安装汇编编译器(一般系统自带吧).假设没有依照以下的命令安装吧 yum install yasm 2.使用最新x264源代码编译(仅仅支持编码)    在x264官网下载最新的代码http://w ...

  2. ZooKeeper分布式集群部署及问题

    ZooKeeper为分布式应用系统提供了高性能服务,在许多常见的集群服务中被广泛使用,最常见的当属HBase集群了,其他的还有Solr集群.Hadoop-2中的HA自己主动故障转移等. 本文主要介绍了 ...

  3. MyEclipse改动内存大小

    方式一网上说的(没有測试过): 找到MyEclipse的安装文件夹,一般假设不改动的话默觉得C:\MyEclipse10.1\Genuitec\MyEclipse 10.1有一个myeclipse.i ...

  4. h5-登录

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  5. 12. Integer to Roman[M]整数转罗马数字

    题目 Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from ...

  6. 当安装了ubuntu操作系统怎么也调用不出中文输入法时,可以用以下方式尝试解决。

    卸载 fcitx sudo apt-get remove fcitx 重启 sudo reboot 重新安装 fcitxsudo apt-get isntall fcitx 安装拼音输入法sudo a ...

  7. HDU 1203 I NEED A OFFER!【01背包】

    解题思路:攒下的钱n相当于包的容量,然后是m个学校的申请费用,申请费用相当于每一个物品的消耗,得到offer的概率相当于每一个物品的价值. 因为要求的是至少得到一份0ffer的概率的最大概率,可以转化 ...

  8. Unity 控制public/private 是否暴露给Inspector面板

    默认情况下Public是暴露给Unity,protect/private是不暴露给Unity的,但有时候想让外部引用,又不想暴露给Unity,怎么办? 对Unity隐藏,使用[HideInInspec ...

  9. ZBrush软件特性之Marker标记调控板

    在ZBrush®中使用Marker标记调控板来记忆物体属性,因此能在任何时间回到标记并使用它给其他物体或改变物体作为参考点. ZBrush软件下载:http://pan.baidu.com/s/1sl ...

  10. 20 个让你效率更高的 CSS 代码技巧

    在这里想与你分享一个由各大CSS网站总结推荐的20个有用的规则和实践经验集合.有一些是面向CSS初学者的,有一些知识点是进阶型的.希望每个人通过这篇文章都能学到对自己有用的知识. 1.注意外边距折叠 ...