[jQuery學習系列二 ]2-JQuery學習二-數組操作
前言
上一篇內容 已經對於Jquery 有了一些認識, 包括Jquery的選擇器和DOM對象, 那麽這一篇繼續來看下Jquery中很實用的Jquery對於數組的操作.
Jquery中對數組的操作大致有以下幾種形式:
each(叠代), map(轉換), grep(篩選), 合並等.
1,叠代(each)
jQuery.each( object, callback ) 返回值:Object
說明:
通用例遍方法,可用於例遍對象和數組。
註意: 傳入的第一個參數可以是數組或者對象.如果數組,則遍歷數組中的每一個對象. 第一個參數表示索引,第二個參數表示值. this表示當前遍歷的元素, 可以通過返回false終止叠代
實例演示:
<body> <h3>數組成員有:</h3> <p id="P1"></p> <h3>篩選後的數組成員有(長度>=5):</h3> <p id="P2"></p> <h3>篩選後的數組成員有:</h3> <p id="P3"></p> </body> $(document).ready(function() { var members = ["Jolinson", "Steve", "Dive", "John", "Damon", "Joy"]; var str = ""; $("#P1").html(members.join(", ")); $.each(members, function(i, item) { //這裏第一個元素i是數組下標,第二個item是數組元素 if(item.length >= 5) { str += item + ", "; } }); str = str.substring(0,str.length - 2); $("#P2").text(str); $("#P3").text(members.join(", ")); });
運行結果圖:
特別註意: each雖然叠代每一個元素或屬性, 但是在叠代函數中並不會改變當前元素的值, 也就是無法改變返回後的對象.
如果需要改變數組中的每一個元素並且將結果返回, 因使用jQuery.map( array, callback )函數.
2,轉換(map)
jQuery.map( array, callback )
返回值:Array
說明:
將一個數組中的元素轉換到另一個數組中。
轉換函數可以返回轉換後的值、null(刪除數組中的項目)或一個包含值的數組,並擴展至原始數組中。
第一個參數表示值,第二個參數表示索引.
<body> <h3>數組成員有:</h3> <p id="P1"></p> <h3>篩選後的數組成員有(長度>=5):</h3> <p id="P2"></p> <h3>篩選後的數組成員有:</h3> <p id="P3"></p> </body> $(document).ready(function() { var members = ["Jolinson", "Steve", "Dive", "John", "Damon", "Joy"]; var str = ""; $("#P1").html(members.join(", ")); str = $.map(members, function(item, i) { //這裏第一個元素item是數組元素,第二個元素i是數組下標 if(item.length >= 5) { return item; } }); //將members全部轉換為大寫 members = $.map(members, function (item, i) { return (i + 1 + ". " + item.toUpperCase()); }); $("#P2").text(str); $("#P3").text(members.join(", ")); });
運行結果圖:
3,篩選(grep)
jQuery.grep( array, callback, [invert] ) 返回值: Array
array: Array類型將被過濾的數組。
callback: Function類型指定的過濾函數。
invert: 可選/Boolean類型默認值為false。指定是否反轉過濾結果。
說明:
該函數將遍歷數組元素,並執行過濾函數function。它會為function提供兩個參數:其一為當前叠代的數組元素,其二是當前叠代元素在數組中的索引。
如果未指定invert參數,或該參數為false,則結果數組將包含function返回true的所有元素。如果參數invert為true,則結果數組將包含function返回false的所有元素。
源數組不會受到影響,過濾結果只反映在返回的結果數組中。
<body> <h3>數組成員有:</h3> <p id="P1"></p> <h3>篩選後的數組成員有(長度>=5):</h3> <p id="P2"></p> <h3>數組成員有:</h3> <p id="P3"></p> <h3>篩選後的數組成員有(使用正則表達式 開頭字母A-K):</h3> <p id="P4"></p> </body> $(document).ready(function () { var members = ["Jolinson", "Steve", "Dive", "John", "Damon", "Joy"]; $("#P1").html(members.join(", ")); members = $.grep(members, function (item, i) { return item.length >= 5; }); $("#P2").text(members.join(", ")); /*----------------------------------------------------*/ var arr = ["Jolinson", "Steve", "Dive", "545sd", "23154", "55855"]; $("#P3").text(arr.join(", ")); arr = $.grep(arr, function (item) { return item.match(/^[A-K]/); }); $("#P4").text(arr.join(", ")); });
4,合並
(1)jQuery.extend( [deep], target, object1, [objectN] )
[deep]:可選/Boolean類型指示是否深度合並對象,默認為false。如果該值為true,且多個對象的某個同名屬性也都是對象,則該"屬性對象"的屬性也將進行合並。
target: Object類型目標對象,其他對象的成員屬性將被復制到該對象上。
object1:可選/Object類型第一個被合並的對象。
[objectN]: 可選/Object類型第N個被合並的對象。
該函數可以將一個或多個對象的成員屬性和方法復制到指定的對象上。
示例如下:
//在當前頁面內追加換行標簽和指定的HTML內容 function w( html ){ document.body.innerHTML += "<br/>" + html; } var x = { name:"CodeMan" }; var y = { age: 18 }; var z = { site: "http://www.cnblogs.com/wang-meng/" }; var obj = $.extend( x, y, z ); w( obj === x ); // true w( obj.name ); // CodeMan w( obj.age ); // 18 w( obj.site ); // http://www.cnblogs.com/wang-meng/
(2)jQuery.makeArray( obj )
函數用於將一個類數組對象轉換為真正的數組對象。
類數組對象是非常常見的: 例如我們經常使用的jQuery對象、函數內的arguments對象,都是類數組對象。
jQuery.makeArray()函數: 我們可以將類數組對象轉換為一個真正的數組對象,從而使用數組對象的內置方法。
示例如下:
<p>段落1</p> <p>段落2</p> //在當前頁面內追加換行標簽和指定的HTML內容 function w( html ){ document.body.innerHTML += "<br/>" + html; } // jQuery對象也是一個類數組對象 var $p = $("p"); var arr1 = $.makeArray( $p ); w( $p instanceof Array ); // false w( arr1 instanceof Array ); // true // NodeList對象也是一個類數組對象 var p = document.getElementsByTagName("p"); var arr2 = $.makeArray( p ); w( p instanceof Array ); // false w( arr2 instanceof Array ); // true function foo(a, b){ //arguments對象也是一個類數組對象 //arguments是收到的實參副本, var arr3 = $.makeArray( arguments ); w( arguments instanceof Array ); // false w( arr3 instanceof Array ); // true } foo(1, 2);
(3)jQuery.inArray( value, array )
value: 任意類型用於查找的值。
array: Array類型指定被查找的數組。
函數用於在數組中搜索指定的值,並返回其索引值。如果數組中不存在該值,則返回 -1。
示例如下:
//在當前頁面內追加換行標簽和指定的HTML內容 function w( html ){ document.body.innerHTML += "<br/>" + html; } var arr = [ 10, 25, 3, 0, -3 ]; w( $.inArray( 25, arr ) ); // 1 w( $.inArray( -3, arr ) ); // 4 w( $.inArray( 10, arr ) ); // 0 // 數組中沒有99 w( $.inArray( 99, arr ) ); // -1 // 數組中有數字10,但是沒有字符串"10" w( $.inArray( "10", arr ) ); // -1
(4)jQuery.merge( first, second )
合並兩個數組
返回的結果會修改第一個數組的內容——第一個數組的元素後面跟著第二個數組的元素。
要去除重復項,需要使用$.unique()
合並兩個數組到第一個數組上: $.merge( [0,1,2], [2,3,4] ) 結果: [0,1,2,2,3,4]
(5)jQuery.unique( array )
刪除數組中重復元素。只處理刪除DOM元素數組,而不能處理字符串或者數字數組。
$.unique( [0,1,2], [2,3,4] ) 結果: [0,1,2,3,4]
(6)arguments(增加內容)
Javascript並沒有重載函數的功能,但是Arguments對象能夠模擬重載。Javascrip中每個函數都會有一個Arguments對象實例arguments,它引用著函數的實參,可以用數組下標的方式"[]"引用arguments的元素。
arguments.length為函數實參個數,arguments.callee引用函數自身。
示例如下:
function test(){ // 循環輸出調用當前函數時傳入的參數 for(var n = 0; n < arguments.length; n++){ document.write( arguments[n] + "|"); } document.write(‘<br>‘); // 輸出換行符進行區分 }; test(); // (空字符串) test("Code", "http://www.cnblogs.com/wang-meng/", 12, true); // Code|http://www.cnblogs.com/wang-meng/|12|true| test("張三", false, 12.315); // 張三|false|12.315| function foo(){ // arguments前也可以加上函數名稱 for(var n = 0; n < foo.arguments.length; n++){ document.write( foo.arguments[n] + "|"); } document.write(‘<br>‘); }; foo("Hello", "World"); // Hello|World| // 使用arguments對象實現任意多個數的求和 function sum(){ var sum = arguments[0]; for(var n = 1; n < arguments.length; n++){ sum += arguments[n]; } return sum; } document.writeln( sum() ); // undefined document.writeln( sum( 1, 5 ) ); // 6 document.writeln( sum( 1, 212, 21, -14, 23 ) ); // 243
5,其他
其他更多關於數組的操作請查看: W3School JS Array
http://www.w3school.com.cn/jsref/jsref_obj_array.asp
以上內容皆是自己學習中整理出來的內容, 如有紕漏請大家看到可以提醒一下. 整理記錄在這裏算是對自己學習的一個總結, 給日後的忘記的自己一個參考.
英語小貼士:
Good for you。
好啊!做得好!
Great minds think alike!
英雄所見略同!
Have a nice day.
祝你今天愉快。
Have butterflies in one‘s stomach.
緊張。
He‘s been everywhere.
他到處都去過了。
He hit the ceiling at the news.
他聽到那消息暴跳如雷/大發雷霆。
His argument doesn‘t hold water.
他的論點站不住腳。
How do I address you?
我怎麽稱呼你?
[jQuery學習系列二 ]2-JQuery學習二-數組操作