數組被描述爲一個存儲元素的線性集合,元素能夠經過索引來任意存取。javascript
幾乎全部的編程語言都有相似的數據結構,可是Javascript中的數組卻略有不一樣。java
Javascript中的數組是一種特殊的對象,因此在數組的操做效率上不如其餘語言中的數組高。shell
也由於數組再JavaScript中被當作對象,因此它有不少屬性和方法能夠再編程時使用。編程
下面就簡單介紹一下JavaScript中的數組的使用方法。數組
注:如下全部的JavaScript代碼均在 jsshell 中運行,一些方法可能在其餘環境中(如瀏覽器和sublime text)中不能運行。瀏覽器
【jsshell的使用】數據結構
/* Js-shell的使用 下載:http://mzl.la/MKOuFY 根據系統和語言選擇不一樣版本進行下載,下載完直接打開js-shell終端進行使用 */ /**************** 在Js-shell中經常使用的一些Js方法 ***************/ print(); //打印頁面/在終端直接打印 putstr(""); //顯示提示信息 var num = readline(); //接受用戶輸入的信息
【 JavaScript中數組的操做】dom
/**************** JavaScript數組操做 ***************/ // 建立數組: var arr1 = []; var arr2 = [1,2,3,4,5]; var arr3 = new Array( ); var arr4 = new Array(10); var arr5 = new Array(1,2,3,4,5); // Js數組中的元素沒必要是同一種類型: var arr6 = [1,」西瓜」,null,true]; // 判斷一個對象是不是數組: Array.isArray( arr ); //顯示true/false // 讀寫數組 for(var i=0;i<num.length;i++){ print(num[i]); } // 由字符串生成數組split(分隔符) var sentence = "This is a sentence..."; var words = sentence.split(" "); //使用空格分割字符串並存在word數組中 //數組的操做 // 淺複製:新數組的依然指向原來的數組,修改原數組則新數組的內容跟着改變 var nums = [1,2,3,4,5]; var arr = nums; //直接講nums賦值給arr nums[0] = 100; //修改nums數組第一個元素的內容 print(arr.[0]); //arr數組的第一個元素的內容也發生了改變 //深複製:即對原數組的每個元素分別進行復制 for(var i=0;i<nums.length;i++){ arr[i] = nums[i]; } nums[0] = 999; print(arr[0]); //此時arr數組的第一個元素不發生改變,仍爲1 // 數組的存取操做 //查找元素indexOf() 若找不到則返回-1 var names = ["Bob","Lily","John","Eileen","Sivan"]; var name = readline(); //用戶輸入一個要查找的名字 var position = names.indexOf(name); //函數返回的是被查找元素在數組中的索引 if(position>=0){ //若是用戶查找的名字在數組中存在 print("Found " + name + " at position " + postion); }else{ print(name + " not found in array..."); } //lastIndexOf(); // 數組的字符串表示 //toString()方法 var days = ["Monday","Tuesday","Wednesday","Thursday"]; var days_string = days.toString(); print(days_stirng); //輸出 Monday,Tuesday,Wednesday,Thursday //join()方法 var days_string1 = days.join(); print(days_join); //輸出 Monday,Tuesday,Wednesday,Thursday print(days); //輸出 Monday,Tuesday,Wednesday,Thursday //直接對一個數學使用print()方法時,系統會自動調用toString()方法 // 由已有數組建立新數組 var nums = [1,2,3,4]; var names = ['Jane','Sam','Mike','Bob']; var arr = nums.concat(names); print(arr); //輸出 1,2,3,4,Jane,Sam,Mike,Bob //splice()截取數組建立新數組(對原數組會有影響) var numbers = [1,2,3,4,5,6,68,7]; var arr = numbers.splice(3,4); //從索引爲3(第三個)的元素開始截取4個元素 print(arr); //輸出4,5,6,68 //push()爲數組末尾添加元素 var seasons = ["Summer","Autumn"]; var push = seasons.push("Winter"); //也同時添加多個元素 //unshift()爲數組開頭添加元素 var unshift = seasons.unshift("Spring"); //pop()刪除數組末尾元素; var pop = seasons.pop(); //shift()刪除數組開頭的元素 var shift = seasons.shift(); // 從數組中間位置添加和刪除元素 var nums = [1,2,3,4,6,7,8]; var addNums = [9,9,9]; nums.splice(2,0,addNums); print(nums); //輸出1,2,9,9,9,3,4,5,6,7,8 //數組排序 //reverse()方法 var nums = [1,2,3,4]; var arr = nums.reverse(); print(arr); //輸出4,3,2,1 //sort()方法 var name = ["Bob","Alice","Cindy"]; var arr = name.sort(); print(arr); //輸出 Alice,Bob,Cindy //sort()方法只針對字符串根據字典順序進行排序, //若是是數字類型,則須要傳入一個比較函數做爲參數 function compare(num1,num2){ return num1 - num2; } var nums = [1,32,45,12]; var arr = nums.sort(compare); //僅傳入函數名稱 print(arr); //輸出1,12,32,45 /**************** 迭代器方法 ***************/ //forEach() 對數組中的每個元素都執行某個方法 function square(num){ print(num,num*num); } var num = [1,2,3,4]; num.forEach(square); //輸出1 1,2 4,3 9 //every()方法 接受一個返回值爲bool類型的函數做爲參數, // 若對於數組中全部元素,該函數均返回true,則該方法返回true function isEven(num){ return num % 2 == 0; } var nums = [2,4,6,8]; var even = nums.every(isEven); if(even){ print("All numbers are even..."); }else{ print("Not all numbers are even..."); } //輸出"All numbers are even..." //some()方法 數組中只要有一個元素能使該函數返回true,該方法返回true function isEven(num){ return num % 2 == 0; } var nums = [2,3,4,5,6]; var even = nums.some(isEven); print(even); //輸出true // reduce() // 對數組進行逐項累加 function add(runningTodal,currentValue){ return runningTodal + currentValue; } var nums = [1,2,3,4,5]; var sum = nums.reduce(add); print(sum); //輸出15 // 將數組元素連接成一個長字符串 function concat(accumulatedString,item){ return accumulatedString + item; } var words = ["This","is","a","good","day"]; var string = words.reduce(concat); print(string); //輸出"This is a good day" var string2 = words.reduceRight(concat); //從右到左執行 print(string2); //輸出"day good a is This" /*生成新數組的迭代器方法*/ // map() 相似forEach(),對數組中的每個元素都執行操做,可是返回的是一個新的數組 function curve(num){ return num+5; } var nums = [1,2,3,4]; var arr = nums.map(curve); print(arr); //輸出 6,7,8,9 function first(word){ return word[0]; } var names = ["Alice","Bob","Cindy","Daniel"]; var arr = names.map(first); //結果爲["A","B","C","D"] print(arr。join()); //輸出"A,B,C,D" print(arr.join("")); //輸出"ABCD" // filter() 傳入返回值爲bool類型的函數名做爲參數,對數組中每一個元素都執行函數, // 可是返回結果爲使函數返回值爲true的元素 //e.g 判斷數組元素的奇偶性 function isEven(num){ return num %2 == 0; //偶數 } function isOdd(num){ return num %2 != 0; //奇數 } var num = []; for(var i=0;i<10;i++){ num[i] = i+1; } var evens = num.filter(isEven); print("Even numbers: "); print(evens); //輸出2,4,6,8,10 var odds = num.filter(isOdd); print("Odd numbers: "); //輸出1,3,5,7,9 print(odds); //e.g 判斷成績是否合格 function passing(num){ return num>=60; } var grade = []; for(var i=0;i<20;i++){ grade[i] = Math.floor(Math.random()*101); } var pass = grade.flter(passing); print("All grades: "); print(grade); print("Passing Grades: "); print(pass); //e.g. 過濾字符串數組 function del(str){ if(str.indexOf("cie")>-1){ return true; }else{ return false; } } var words = ["receive","decide","percieve","deceit","convince"]; var misspelled = word.filter(del); print(misspelled); //輸出"percieve" /* 二維和多維數組 *JavaScript中支持一維數組,可是能夠經過在數組元素中保存數組的方法來建立多維數組 */ // 建立二維數組 var num = []; var rows = 5; for(var i=0;i<rows;i++){ num[i] = []; //使數組中每一個元素都是一個數組 } /* 上述方法存在的問題是:數組中的每一個元素都是undefined,更好的方式是按照 * JavaScript:The good part(O'Reilly) 的例子,經過擴展js數組對象, * 新增一個方法,該方法根據傳入的參數,設定了數組的行數、列數和初始值,以下: */ Array.martix = function(numrows,numcols,initial){ var arr = []; for(var i=0;i<numrows;i++){ var colnums = []; //定義列元素爲數組 for(var j=0;j<numcols;j++){ colnums[j] = initial; //爲元素的列賦值 } arr[i] = colnums; //使元素的每一行均爲數組 } return arr; } //測試上述方法 var nums = Array.martix(3,4,0); print(nums[2][3]); //顯示爲0 //對於小規模的數據,能夠直接建立二維數組以下: var nums = [[1,2,3],[4,5,6],[7,8,9]]; //處理二維數組(對於良莠不齊的數組一樣處理) var total = 0; var aver = 0; for(var row=0;row<nums.length;i++){ for(var col=0;col<nums[row].length;col++){ total += nums[row][col]; } aver = total / nums[row].length; print("total: "+total+"; "+"Averge: "+aver.toFixed(2)); total = 0; aver = 0.0; } /* 對象數組 */ function point(x,y){ this.x = x; this.y = y; } var p1 = new point(1,2); var p2 = new point(3,4); var p3 = new point(5,6); var p4 = new point(7,8); var points = [p1,p2,p3,p4]; print(points); //輸出的是[object Object],[object Object],[object Object],[object Object] print(p1.x); //輸出1 points.push(new point(9,0)); print(points[4].y); //輸出0 points.shift(); print(points[0].x); //輸出3 /* 數組對象 */ // 建立對象,保存氣溫,並求出氣溫的平均值 function weekTemps(){ //構造函數 this.dataStore = []; //建立空數組 this.add = add; this.average = average; } function add(temp){ this.dataStore.push(temp); //爲數組中添加元素 } function average(){ var total = 0; for(var i=0;i<dataStore.length;i++){ total += this.dataStore[i]; } return total/this.dataStore.length; } var thisweek = new weekTemps(); thisweek.add(34); //像數組中添加元素 thisweek.add(43); thisweek.add(54); thisweek.add(30); thisweek.add(75); thisweek.add(66); thisweek.add(73); thisweek.add(56); print(thisweek.average); //輸出平均溫度值 /*JavaScript數組操做練習*/ // e.g.1 建立一個記錄學生成績的對象,提供一個添加成績的方法,以及一個顯示學平生均成績的方法 function Grades(){ //構造方法用於初始化成績信息 this.scores = []; this.add = add; this.aver = aver; } function add(score){ //添加成績的方法 this.scores.push(score); } function aver(){ //顯示平均成績的方法 var total = 0; for(var i=0;i<scores.length;i++){ total += this.scores[i]; } return total / this.scores.length; } var grade = new Grades(); //建立成績對象 grade.add(87); //逐個添加成績數組中的元素 grade.add(98); grade.add(79); grade.add(86); grade.add(58); grade.add(73); print(grade.aver); //計算平均成績 // e.g.2 將一組單詞存儲在一個數組中,並按正序和逆序分別顯示這些單詞 var words = ["Bob","Alice","Daneil","Cindy"]; var arr1 = words.sort(); print(arr1); //輸出 Alice,Bob,Cindy,Daneil var arr2 = arr1.reverse(); print(arr2); //輸出 Daneil,Cindy,Bob,Alice // e.g.3 修改前面的weekTemps對象,使它能夠使用二維數組來存儲每個月的有用數據, // 增長一些方法用以顯示平均數、具體某一週平均數和全部周的平均數 // e.g.4 建立這樣一個對象,它將字母存儲在一個數組中,而且用一個方法能夠將字母 // 連在一塊兒,顯示成一個單詞 function obj_letter(){ this.letters = []; this.add = add; this.linking = link; // 此處必定要將add方法也賦值,不然對象沒法使用此方法,不一樣與Java中方法在類中, // 建立類對象能夠直接使用類方法,在這裏全部的方法都要身名稱爲對象的方法 } function add(item){ this.letters.push(item); } function linking(arr){ // return arr.join(); // 直接調用join()或toString()方法產生的數組字符串之間會有逗號。 return arr.join(""); } var obj = new obj_letter(); obj.add('h'); obj.add('e'); obj.add('l'); obj.add('l'); obj.add('o'); var word = obj.linking(obj.letters); print(word); //輸出 hello /******************** The End *************************/