jQuery——map()函數以及它的java實現,jquerymap
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()最簡單的功能
而無法對擷取到的值進行任意的改變,若想實現也可以採用回調介面的方式來做,這裡就不再給出代碼了,有興趣的朋友可以試試~
jquery 怎建立類似java map集合
var map = {}; // Map map = new HashMap();
map[key] = value; // map.put(key, value);
var value = map[key]; // Object value = map.get(key);
var has = key in map; // boolean has = map.containsKey(key);
delete map[key]; // map.remove(key);
java中的map函數怎使用?
map不是函數,是一個對象
可以 Map map = new HashMap();建立
Map就是索引值對,
map.put("1","123");
map.put("2","234");
map.get("1")//123
map.get("2")//234