jQuery——map()函數以及它的java實現,jquerymap

來源:互聯網
上載者:User

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
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.