javascript
JavaScript对象和数组
在JavaScript中對象是一種數據結構,用于將數據和功能組織在一起,描述一類對象所具有的屬性和方法。
對象是某個特定類型的實例。新對象是new操作符后跟一個關鍵字來實現的。構造函數本身就是一個函數,用于創建新對象。 var person = new Object();這行代碼創建了一個Object的實例,并將值保存了變量person中。
創建對象的方式有兩種,一種是通過Object函數來創建。
var animal = new Object();animal.eat=function(){console.log("eat");};animal.color="blue";上面的代碼通過object創建了對象animal,并創建了對象的方法eat以及屬性color。
同時可以通過字面量的方式創建對象。
var animal={eat:function(){console.log("eat");},color:"blue"}上面通過字面量的方式創建了新對象animal,并創建了方法eat和屬性color。通過字面量創建的對象,并不會調用Object函數。對象可以作為參數傳遞至函數中使用。
function test(args){console.log("Name:"+args.name+"\n");console.log("age:"+args.age+"\n");}test({"name":"haha","age":18});函數test接收了args參數,args是一個對象。在函數中可以直接訪問對象的屬性。這種情況適合向函數傳遞大量的可選參數情況。
function Person(options){//Jquery 的extend方法,用于合并參數this.options=$.extend(true, {"name":"zhang"},options);console.log(this.options);}var perosn = new Person({"name":"ge","age":18,"sex":"man"});上面的代碼定義了Person函數,并且為person傳遞了大量的對象。同時在函數內部有默認的對象,用jquery的extend方法進行參數的合并。
一般情況下,訪問對象的屬性通過操作符.來訪問,不如person.name。訪問對象的方法也通過.來調用,比如person.eat()。訪問對象的屬性還有另外一種訪問方式,通過下標的方式訪問,比如person["age"]。
有些對象的屬性包含一些特殊字符,不能通過操作符(.)來訪問,必須通過中括號的方式來訪問,比如“first name”,這個屬性有空格,必須通過中括號訪問。person["first name"]。
JavaScript中的數組與其他高級語言有很大的區別,數組中存放不同類型的值,可以在數組的第一個位置存放Number,第二個位置存放布爾值。創建數組也有兩種基本的方式,比如 var array = new Array();
如果預先知道數組的長度,可以 var array = new Array(20);也可以向數組中傳遞參數, var array = new Array("red",20,true);當我們只傳遞一個參數時候就比較復雜了,如果傳遞的是數值,則創建該長度的數組,如果傳遞的是字符串,則創建包含這個值的數組。
創建數組的另一種方式是通過字面量的方式創建數組。
var array=[];var array1=["blue",1,true];
訪問數組的方式通過[]下標的方式訪問的,比如 array1[0],輸出第一項的值;rray1[1],輸出第二項的值;array[2]="hehe",修改了第三項的值;array[3]="en",添加新的數組元素。方括號中的索引表示要訪問的值。數組的長度保存在length中。
通過 instanceof,以及isArray可以判斷一個對象是否是數組,比如 array instanceof Array,array.isArray()
var array=["blue","red","yellow"]; console.log(array.toString());//輸出blue,red,yellow console.log(array.join(";"));//輸出blue;red;yellowtoString()方法將數組轉換為String,通過操作符逗號分隔數組元素。同時數組提供了join方法可以指定字符來分隔數組元素。
var array=["blue","red","yellow"]; console.log(array.toString());//輸出blue,red,yellow console.log(array.join(";"));//輸出blue;red;yellow var str = array.toString();// var narray= str.split(",");//["blue","red","yellow"]; console.log(narray[0]);//輸出blue上述代碼展示split的用法,split可以字符串轉換為數組。通過指定的分隔符,將字符串轉換為數組。
數組提供了一組方法,使數組使用和其他的數據結構一樣。數組可以表現的像棧一樣,可以限制插入和刪除。棧是一種后進先出的數據結構,最新添加的項最早被移除。插入和刪除都發生在棧的頂部。數組提供了push和pop方法。
push方法接收任意數量的參數,將他們逐個添加到數組的末尾,并返回數組的長度。pop方法可以從數組的末尾刪除一項,并返回移除的項
var array=[]; console.log(array.length);//0 array.push("red"); console.log(array.length);//1 array.pop(); console.log(array.length);//0上面的代碼,定義了一個數組array,并通過push方法添加了一項,數組的長度為1,通過pop方法刪除了一項,數組的長度為0.
隊列的數據結構是先進先出,數組同樣可以表現的像隊列一樣,實現元素的先進先出。隊列在末尾添加元素,在列表的前端移除數據項。push方法可以向數組的末端添加數據元素,shift方法可以移除數組的第一項,并返回,同時數組長度減1.
var array=[]; array.push("red"); array.push("blue"); array.push("green"); array.shift(); console.log(array.toString());//blue,green上面的代碼定義了一個數組array,并通過push方法添加了三項元素,最好通過shift方法刪除數組的第一項,最后數組只有兩項,toString()方法輸出。
數組的重新排序有兩個方法reverse和sort。reverse就是數組元素反轉,sort方法將數組進行升序排列,首先要將數組的元素調用toString方法,然后再進行排序。
var array=[1,7,5,3,2]; array.reverse(); console.log(array.toString());//2,3,5,7,1 array.sort(); console.log(array.toString());//1,2,3,5,7 var array =[1,3,5,7,9,11]; array.sort(); console.log(array.toString());//輸出1,11,3,5,7,9?
通過上面的代碼,我們發現sort方法的排序有時候并不是我們想要的結果,所以sort方法提供了傳遞函數作為參數的方法。通過傳遞函數我們能夠實現數值的升序以及降序排列。
function compareMax(v1,v2){if(v1<v2){return -1;}else if(v1>v2){return 1}else{return 0;}}//降序function compareMin(v1,v2){if(v1<v2){return 1;}else if(v1>v2){return -1;}else {return 0;}}var array= [1,3,11,7,2,10];array.sort(compareMax);console.log(array.toString());//1,2,3,7,10,11 array.sort(compareMin);console.log(array.toString());//11,10,7,3,2,1比較函數接收兩個參數,如果第一個參數應該在第二個參數之前則返回負數,如果第一個參數應該位于第二個參數之后則返回整數,兩個數相等返回0.
//升序排列function compareMax(v1,v2){/*if(v1<v2){return -1;}else if(v1>v2){return 1}else{return 0;}*/return v1-v2;}//降序function compareMin(v1,v2){/* if(v1<v2){return 1;}else if(v1>v2){return -1;}else {return 0;}*/return v2-v1;} View Code通過上面的兩個函數同樣可以實現升級和降序排列。
?JavaScript的數組還包含許多其他常用的方法。concat方法基于當前的數組,形成一個新的數組,并不改變原數組的值。concat的參數可以一個或者多個數組,可以不是數組。如果不是數組,則在原數組的末尾添加一個新的元素,形成新的數組。如果是數組,則會將數組的每一項添加到新的數組中,形成新的數組。
var array=["1",2]; var array1=array.concat(["3",4]); console.log(array.toString());//輸出1,2 console.log(array1.toString());//輸出1,2,3,4上面的代碼可以看出通過concat生成了新的數組,原數組的值并沒有發生改變。
slice方法能夠基于當前數組的一項或者多項創建一個新的數組,不會改變原始數組。slice方法有一個或者兩個參數,表示數組下標的起始和結束的位置,不包括結束位置。如果只有一個參數,則從開始位置一直到數組結束。
var array=["blue","red","green","black","white"]; var array1=array.slice(1,3); var array2=array.slice(1); console.log(array1.toString());//red,green console.log(array2.toString());//red,green,black,white如果slice參數有負數,則用數組長度加上該負數,如array.slice(-2,-1),則array.slice(3,4)相當。如果起始位置大于結束位置,則返回空數組。
splice方法可以向數組的中部插入元素,splice可以實現數組的插入、刪除和替換。刪除需要指定兩個參數,要刪除第一項的位置,要刪除的項數。如splice(1,3),從數組第二項開始,刪除三個數組元素。splice插入方法至少傳遞三個參數,第一要插入元素的位置,第二個要刪除的項數(0),第三個參數要插入的元素,如果要插入多項,可以有第四個參數。。。。
splice的替換方法也至少需要三個參數,第一個參數元素要刪除的位置,第二個參數刪除的項數,第三個參數插入的元素。
var array=["red","green","blue","white","black"]; var array1=array.splice(1,1);//array被刪除一項["red","blue","white","black"] var array2=array.splice(1,0,"green");//["red","green","blue","white","black"] var arrays=array.splice(1,1,"yellow");//["red","yellow","blue","white","black"]上面的代碼講述了splice方法的刪除、插入、替換方法的使用。
數組的indexOf方法可以查找某個元素在數組的位置,如果數組中部存在該元素,則返回-1.
var array=["red","green","blue","white","black"]; console.log(array.indexOf("green"));//1 console.log(array.indexOf("orange"));//-1JavaScript為數組提供了5個遍歷的方法,分別是every、fillter、forEach、map和some方法。every方法對數組的每一項運行給定的函數,如果該數組的每一項對函數都返回true,則返回true。
some方法與every方法類似,但是some方法只要有一項滿足函數,就返回true。
var array=[1,2,3,4,5];var result=array.every(function(value,index,array){return value>2;});console.log(result);//false,因為1<2var result1=array.some(function(value,index,array){return value>2;});console.log(result1);//truefilter函數利用指定的函數確定是否在返回的數組中包含一項,并形成新的數組。
var array=[1,2,3,4,5]; var array1=array.filter(function(value,index,array){ return value>2; }); console.log(array1.toString());//3,4,5上面的代碼對array進行了filter過濾,返回所有大于2的項,形成新的數組。
map方法也返回一個新的數組,但是這個新的數組的每一項都是對原來的每一項元素執行了指定的函數。
var array=[1,2,3,4,5]; var array1=array.map(function(value,index,array){return value*2;}); console.log(array1.toString());//2,4,6,8,10上面的代碼對array進行了map方法,返回了新的數組,在原來的數組每一項乘2.
forEach方法,對數組的每一項執行傳入的函數。沒有返回值,與for循環類似。
var array=[1,2,3,4,5]; array.forEach(function(value,index,array){ console.log(value); });?可以自己上述5個重寫。因為有的瀏覽器不支持上述5個方法
Array.prototype.every=function(func){var result=false;for(var i=0,len=this.length;i<len;i++){result=func(this[i],i,this);if(result==false){return false;}}return true;}Array.prototype.some=function(func){var result=false;for(var i=0,len=this.length;i<len;i++){result=func(this[i],i,this);if(result==true){return true;}}return false;}Array.prototype.filter=function(func){var result=[];for(var i=0,len=this.length;i<len;i++){var flag=func(this[i],i,this);if(flag){result.push(this[i]);}}return result;}Array.prototype.map=function(func){var result=[];for(var i=0,len=this.length;i<len;i++){var flag=func(this[i],i,this);result.push(flag);}return result;}Array.prototype.forEach=function(func){for(var i=0,len=this.length;i<len;i++){func(this[i],i,this);}} View Code?
轉載于:https://www.cnblogs.com/ggz19/p/8176502.html
總結
以上是生活随笔為你收集整理的JavaScript对象和数组的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: rank() over,dense_ra
- 下一篇: 【深度学习】词的向量化表示