javascript 數組

數組是值的有序集合,每個值叫做元素,每個元素在數組中都有數字位置編號,<br />
也就是索引,js中的數組是弱類型的,數組中可以含有不同類型的元素。數組元素甚至可以是對象或其它數組
<br />

1、數組可以動態添加值的,無需指定大小。<br />
2、數組可以用for in 枚舉,但是會枚舉出原型上的屬性<br />
3、可以用for  循環 while 等<br />
4、0 in arr  判斷數組索引0是否有值<br />
5、可以通過修改length來動態修改數組大小<br />
6、可以直接用[100] 爲指定索引賦值<br />

<script>
var arr1=[1,2];
//數組變量的構造函數指向Array
console.log(arr1.constructor===Array)
</script>


7、Array.from(obj|arr|str,[mapfn],[this])<br />
從類似數組的對象或可迭代的對象返回一個數組。參數需是具有編制索引的元素和 length 屬性的對象或可迭代對象,如 Set 對象。<br />
對數組中每個元素調用了可選映射函數。<br />
this可選。指定映射函數中的 this 對象。<br />
以前轉換數組需要用[].slice.call(arguments) 現在用Array.from(arguments)<br />


<script>
//元素集合返回數組
var a=Array.from(document.querySelectorAll('*'))
console.log(a);

//返回字符串數組 和split有些像
a=Array.from('abc')
console.log(a);

//set數據結構返回 數組
a=Array.from(new Set(['a','b','c']))
console.log(a);

//映射函數用法
a=Array.from('123',function(x){
return x*x
})
console.log(a);

//創建指定長度的數組
a=Array.from({length:100}).map(function(x,index){
return index
})
console.log(a);

//指定映射內this 
var obj={name:'star'}
a=Array.from('abcdefg',function(x){
return this.name+x;
},obj)
console.log(a);
</script>

8、Array.isArray(obj)<br />
確定對象是否爲數組。如果 object 是數組,則爲 true;否則爲 false。如果 object 參數不是對象,則返回 false。<br />

<script>
console.log('---------------------')
console.log(Array.isArray({}))//false
console.log(Array.isArray([]))//true
console.log(Array.isArray(new Set()))//false
console.log(Array.isArray(document.querySelectorAll('*')))//false
</script>

9、Array.of(element0[, element1][, ...][,elementN])<br />
從傳入的參數返回一個數組。<br />
可選。要置於數組中的元素。這將創建一個具有 n + 1 個元素且長度爲 n + 1 的數組。<br />
此函數類似於調用 new Array(args),但當傳入一個參數時,Array.of 不包括特殊行爲。<br />
of 和new Array對於單個數字,處理不一樣,of當成0的值,new 當成數組長度<br />
<script>
console.log('---------------------')
console.log(Array.of(1,2,3))
console.log(Array.of(3))//[3]
console.log(new Array(3))//返回數組爲空,長度爲3
</script>


10、array.concat(arr,....)<br />
組合兩個或兩個以上的數組,返回新數組,array數組不會修改。<br />
參數可以是數組,字符串,數字等。二維數組直接當值了。
<script>
console.log('---------------------')
var a=[1,2];
var b=a.concat(a,4,[5,6,[7]])
console.log(a,b)
</script>

11、array.indexOf(val,index)<br />
返回某個值在數組中的第一個匹配項的索引。沒有返回-1<br />
index指定搜索的開始索引,可以是負數,就是從後往前位索引,也就是數組長度+負數的位置開始<br />
<script>
console.log('---------------------')
a=[1,2,3,4,5,6];
console.log(a.indexOf(1,2))
</script>

12、array.lastIndexOf(val,index)<br />
返回指定的值在數組中的最後一個匹配項的索引。<br />
用法同上<br />

13、array.join([separator])<br />
用指定的分隔符鏈接數組元素返回字符串,如值爲undefined null 視爲空<br />
分隔符可選 <br />
它和字符串split(分隔符,返回長度)  經常一起用<br />

14、array.hasOwnProperty(索引)<br />
確定數組是否具有指定索引的值。<br />
<script>
console.log('---------------------')
//數組值索引2是否有值
console.log([1,2,0].hasOwnProperty(2))
//數組原型對象 是否有indexOf方法
console.log([].__proto__.hasOwnProperty('indexOf'))
</script>

15、push pop shift unshift<br />
push(val,val,[val])  將新元素追加到一個數組中,並返回新的數組長度。 數組參數直接添加<br />
pop()  從數組中移除最後一個元素並返回該元素<br />
unshift()  在數組的開頭插入新元素。用法和push一樣<br />
shift()  從數組中移除第一個元素並將返回該元素。
<script>
console.log('---------------------')
a=[1,2]
console.log(a.push(3,4,[5,6]),a)
</script>

16、array.valueOf()<br />
返回指定對象的基元值。返回數組實例<br />
數組的valueOf() 和數組絕對相等<br />
<script>
console.log('---------------------')
a=[1,2,3]
console.log(a===a.valueOf())//true
</script>

17、array.toString()<br />
返回數組的字符串表示形式。 分隔符爲逗號。和join功能類似<br />

18、array.keys()  array.values() array.entries()<br />
返回一個迭代器,它能返回數組的索引值。<br />
返回一個迭代器,它返回數組的值。<br />
返回一個迭代器,它返回數組的鍵/值對。[index,value]
<script>
console.log('---------------------')
var k=[1,2,3].keys();
var v=[1,2,3].values();
var e=[1,2,3].entries();
console.log(k.next().value,v.next().value ,e.next().value )
console.log(k.next().value ,v.next().value ,e.next().value )
console.log(k.next().value ,v.next().value,e.next().value  )
</script>

19、array.filter(callfn,thisobj)<br />
返回數組中的滿足回調函數中指定的條件的元素,組成新數組。<br />
一個包含回調函數爲其返回 true 的所有值的新數組。如果回調函數爲 array1 的所有元素返回 false,則新數組的長度爲 0。<br />
函數參數爲:value,index,arr<br />
<script>
console.log('---------------------')
var o={num:10}
var a=[1,32,42,23,5,3,5,76,4,3,43];
var r=a.filter(function(value,index,arr){
return value>this.num
},o)
console.log(a,r);
</script>

20、array.forEach(callfn,thisobj)<br />
數組每個元素執行指定操作<br />
循環數組執行函數,不修改數組。<br />
<script>
console.log('---------------------')
a.forEach(function(value,index,arr){
console.log(value*10)
})
</script>

21、findIndex(callfn,thisobj)<br />
返回滿足回調函數中指定的測試條件的第一個數組元素的索引值,沒有符合返回-1<br />
<script>
console.log('---------------------')
var r=a.findIndex(function(value,index){
return value>100;
})
console.log(r);
</script>

22、array.map(callfn,this.obj)<br />
對數組的每個元素調用定義的回調函數並返回包含結果的數組。<br />
循環數組執行函數,返回新數組<br />
<script>
console.log('---------------------')
var r=a.map(function(value,index){
return value*index;
})
console.log(r);
</script>

23、array.sort(fn)<br />
對數組排序,直接修改數組,返回值爲數組本身。<br />
返回值爲正數時 從小到大  返回值爲負從大到小<br />
x-y   小-大   y-x  大-小
<script>
console.log('---------------------')
a.sort(function(x,y){
return y-x;
})
console.log(a)
</script>

24、array.reduce(callfn(prevalue,value,index,arr),initialvalue)<br />
對數組中的所有元素調用指定的回調函數。該回調函數的返回值爲累積結果,並且此返回值在下一次調用該回調函數時作爲參數提供。<br />
initialvalue爲初始時累加的值<br />
函數參數:上一次的值, 當前值,當前索引,數組<br />
<script>
console.log('---------------------')
//pre 爲上次值,初始爲100 ,value爲循環當前值
r=a.reduce(function(pre,value,index,arr){
return pre+value;
},100)
console.log(r);
</script>

25、array.reduceRight(callfn,initiavalue)<br />
從後向前循環數組,計算返回累積結果<br />

26、array.reverse()<br />
返回數組中的元素,返回結果數組。修改當前數組<br />
<script>
console.log('---------------------')
r=a.reverse();
console.log(r,a)
</script>

27、array.some(callfn,thisobj)<br />
函數執行時只要有一個返回了true,則返回true。
如果某些元素通過測試則返回true,否則爲false。<br />
它循環到第一個返回true時,就結了,不再循環執行
<script>
console.log('-some--------------------')
//所有值都大於10才返回true
r=a.some(function(value,index,arr){
console.log(value);
return value>10
})
console.log(r);
</script>
28、array.every(callfn,thisobj)<br />
所有成員都滿足測試返回true時,才返回true,否則false<br />
它循環到第一個返回false時,就結了,不再循環執行<br />


29、splice(start,deletecount,item1,item2..)<br />
從一個數組中移除元素,如有必要,在所移除元素的位置上插入新元素,並返回所移除的元素<br />
30、slice(start,end)<br />
返回一個數組中的一部分,並組成數組<br />
沒有end時默認到結尾,參數可爲負數,當視爲length+值<br />

31、array.fill(value,start,end)<br />
使用指定值填充數組,可以設置需要填充的開始索引和結束索引,默認全填充<br />
發佈了152 篇原創文章 · 獲贊 4 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章