摘要:創建數組判斷比是否是個數組取數組元素屬性返回數組的成員數量。增加數組元素方法在數組的末尾增加一個或多個元素,并返回數組的新長度。表示要移除的數組元素的個數要添加進數組的元素最主要的的用途是向數組的中部插入元素。
數組的定義
數組是按序號排列的一組值,每個值的位置都有編號(從0開始)。數組本質上是一種特殊的對象。它的鍵名是按(0,1,2...)排列的一組數字。
創建數組:
var arr = new Array(values); var arr = [vaules];
判斷比是否是個數組
Array.isArray(arr)
arr instanceof Array
取數組元素
arr[index]
length 屬性
返回數組的成員數量。
Javascript使用一個32位整數,保存數組的元素個數。這意味著數組的成員最多只有4294967295個。
var arr = ["a","b"]; arr.length // 2 arr.[10] = "c" arr.length //11
從上面的輸出結果可以看出,length屬性可以動態變化,如果將length屬性設為 0 ,就會將數組清空。如果設置的數小于原有的個數,那么在這個數后面的數值就自動刪除了。反過來,如果設置的數大于原有的個數,數組的成員將增大,都為 undefined。
var a = [1,2]; a.length = 5; a[4] // undefined a.length = 1; a.[1] // undefined a.length = 0; a //[]
增加數組元素
push()方法 在數組的末尾增加一個或多個元素,并返回數組的新長度。
unshift()方法 在數組的開頭增加一個或多個元素,并返回數組的新長度。
length 屬性
var arr = [1, 2, 3] arr.push(4) arr // 1, 2, 3, 4 arr.unshift(6) arr // 6, 1, 2, 3, 4 arr[arr.length] = 7 // 與push()方法類似 arr // 6, 1, 2, 3, 4, 7
刪除數組中的元素
delete 運算符,可以刪除數組中的某個元素,但這不會改變length屬性的值.
pop() 方法 刪除數組的最后一個元素,并返回這個元素。
shift() 方法 刪除數組的第一個元素,并返回這個元素。
var arr = [1,2,3]; delete arr[0]; arr // [undefined,2,3] arr.length // 3 var last = arr.pop() var first = arr.shift() last // 3 first // undefined arr //2類數組對象
在js中,有些對象被叫做“類數組對象”(array-like object),因為這些對象看起來很像數組,可以使用length屬性,但是無法使用數組的方法。
典型的類數組對象是函數的arguments對象,以及大多數DOM元素集,還有字符串。
// arguments對象 function args() {return arguments; } var arraylike = args("a","b") arrayLike[0] // "a" arrayLike.length // 2 arrayLike instanceof Array // false Array.isArray(arrayLike) // false // DOM元素集 var elts = document.getElementsByTagName("p"); elts.length // 3 eles instanceof Array // false //字符串 "abc"[1] // "b" "abc".length // 3 "abc" instanceof Array // false
數組的slice方法能將類數組對象,變成真正的數組。slice方法后面會結介紹。
var arr = Array.prototype.slice.call(arrayLike);數組的遍歷
for...in 循環
var a =[1, 2, 3]; a.other = "other"; for (var i in arr){ console.log( arr[i]); } // 1, 2, 3, other
從上面的輸出結果可以看出,利用for..in循環會將動態添加的非數字鍵的值遍歷出來,因此需要使用的時候需要注意。
for 循環和 while 循環
var a = [1, 2, 3]; // for循環 for(var i = 0; i < a.length; i++) { console.log(a[i]); } // while循環 var i = 0; while (i < a.length) { console.log(a[i]); i++; } var l = a.length; while (l--) { console.log(a[l]); }
forEach()方法
//array.forEach(callback[, thisArg]) //callback 在數組的每一項上執行的函數,接受三個參數:item: 數組當前項的值,index: 當前項的索引,arr:數組本身。 var arr = [1, 2, 3] arr.forEach(function(item, index, arr){ console.log(item, index); }); //1 0 //2 1 //3 2數組常用的方法
join() 將數值轉換為字符串
var arr = [1, 2, 3]; arr.join(); // "1,2,3" arr.join("_"); // "1_2_3"
reverse() 將數組逆序
// 原數組會被修改 var arr = [1, 2, 3]; arr.reverse(); // [3, 2, 1] arr; // [3, 2, 1]
sort() 數組排序
默認情況下是升序排列的,底層是調用了每個數組項的 toString() 方法,然后比較得到字符串,即使每個數組項的數值是數字,比較的也是字符串。
// 原數組會被修改 var arr = [1, 12, 213, 1432, "a"]; arr.sort(); // [1, 12, 1432, 213, "a"] arr.sort(function(a, b){ return b-a; //按倒序排列數組 });
concat() 數組合并
用法:array.concat(value1, value2, ..., valueN)
// 原數組不會被修改 var arr =[1, 2, 3] arr.concat(4, 5); arr; //[1, 2, 3] arr.concat([11,2],3); // [1, 2, 3, 11, 2, 3]
slice() 返回部分數組
用法:array.slice(begin[,end])
slice用于復制數組,復制完后舊數組不變,返回得到的新數組是舊數組的子集。
第一個參數begin是開始復制的位置,需要注意的是,可以設負數。設負數表示從尾往前數幾個位置開始復制。例如slice(-2)將從倒數第2個元素開始復制。另外需要注意的是,該參數雖未標注為可選,但實際上是可以省略的,省略的話默認為0。
第二個參數end可選,表示復制到該位置的前一個元素。例如slice(0,3)將得到前3個元素,但不包含第4個元素。不設的話默認復制到數組尾,即等于array.length。
//原數組不會被修改 var arr = [1, 2, 3, 4, 5]; arr.slice(); //[1, 2, 3, 4, 5] arr.slice(1,3); // [2, 3] arr.slice(1, -1); // [2, 3, 4] arr; // [1, 2, 3, 4, 5]
splice() 數組拼接
用法:array.splice(start, deleteCount[, item1[, item2[, ...]]])
start 指要從哪一位開始修改內容,如果超出了數組的長度,則從數組末尾開始添加內容;如果是負值,則表示從數組末位開始的第幾位。
deleteCount 表示要移除的數組元素的個數
item 要添加進數組的元素
最主要的的用途是向數組的中部插入元素。
//原數組會被修改 var arr = [1, 2, 3, 4, 5]; //從第三個數組元素刪除 arr.splice(2); // returns [3, 4, 5] arr; // [1, 2] //從第三個數組元素刪除,刪除兩個元素 arr.splice(2, 2) // returns [3, 4] arr; // [1, 2, 5] //將"a","b"替換到數組的第二個元素 arr.splice(1, 1, "a", "b")
forEach() 數組遍歷
用法:array.forEach(callback[, thisArg])
callback 在數組的每一項上執行的函數,接受三個參數:item:數組當前項的值,index: 當前項的索引,arr:數組本身。
var arr = [1, 2, 3] arr.forEach(function(item, index, arr){ console.log(item, index); }); //1 0 //2 1 //3 2
map() 數組映射
map映射創建新數組,用法: map(function(value, index, array) { … }, [thisArg] );。和forEach一樣,不贅述。唯一需要注意的的是回調函數需要有return值,否則新數組都是undefined。
其實map能干的事forEach都能干,你可以把map理解為forEach的一個特例,專門用于:通過現有的數組建立新數組。
//原數組未被修改 var arr= [1, 2, 3]; arr.map(function(x){ return x+10; // 需要 return 值,否則新數組里都是 undefined }); // [11, 12, 13] arr; // [1, 2, 3]
filter() 數組過濾
filter用于過濾數組,用法: filter( function(value, index, array) { … }, [thisArg] ); 。唯一需要注意的的是回調函數需要return布爾值true或false,
//原數組未被修改 var arr= [1, 2, 3, 4, 5, 6, 7, 8]; arr.filter(function(x,index){ return x%2 == 0; }); // [2, 4, 6, 8] arr; // [1, 2, 3, 4, 5, 6, 7, 8]
every() some() 數組判斷
some表示只要某一個滿足條件就OK,every表示全部滿足條件才OK。
用法:
arr.every(callback[, thisArg])
arr.some(callback[,thisArg])
var arr= [1, 2, 3, 4, 5]; arr.every(function(x){ return x < 6; }); // true arr.every(function(x){ return x > 6; }); // false arr.some(function(x){ return x === 1; }); // true arr.some(function(x){ return x === 6; }); // false
reduce() reduceRight()
reduce() 方法接收一個函數作為累加器(accumulator),數組中的每個值(從左到右)開始合并,最終為一個值。 兩者都是用于迭代運算。區別是reduce從頭開始迭代,reduceRight從尾開始迭代。
用法: reduce( function(previousValue, currentValue, currentIndex, array) { … }, [initialValue] );
第一個參數是回調函數,有4個參數:previousValue,currentValue,currentIndex,array。看名字也能知道意思:前一個值,當前值,當前索引,數組本身。
第二個參數initialValue可選,表示初始值。如果省略,初始值為數組的第一個元素,這樣的話回調函數里previousValue就是第一個元素,currentValue是第二個元素。因此不設initialValue的話,會少一次迭代。
//將數組所有項相加 var arr = [0, 1, 2, 3]; var sum = arr.reduce(function(a, b) { return a + b }, 0); // 6 arr; //[0, 1, 2, 3] //數組扁平化 var flattened = [[0, 1], [2, 3], [4, 5]]; flattened.reduce(function(a,b){ return a.concat(b); }); // returns [0, 1, 2, 3, 4, 5]
indexOf() lastIndexOf() 數組檢索
用法:indexOf( searchElement, [fromIndex = 0]) / lastIndexOf( searchElement , [fromIndex = arr.length – 1])
第一個參數searchElement即需要查找的元素。第二個參數fromIndex可選,指定開始查找的位置。如果忽略,indexOf默認是0,lastIndexOf默認是數組尾。
兩者都用于返回項目的索引值。區別是indexOf從頭開始找,lastIndexOf從尾開始找。如果查找失敗,無匹配,返回-1
var arr = ["a", "b", "c", "d", "e"]; arr.indexOf("c"); // 2 找到返回數組下標 arr.indexOf("c", 3); // -1 指定從3號位開始查找 arr.indexOf("f"); // -1 沒找到該元素 arr.lastIndexOf("c"); // 2 arr.lastIndexOf("c",2); // 2 arr.lastIndexOf("f"); // -1 沒找到該元素
isArray() 判斷是否是數組
用法:Array.isArray(value)
var arr = []; var a = "not array"; Array.isArray(arr); // true Array.isArray(a); // false參考資料
MDN
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/87791.html
摘要:個人前端文章整理從最開始萌生寫文章的想法,到著手開始寫,再到現在已經一年的時間了,由于工作比較忙,更新緩慢,后面還是會繼更新,現將已經寫好的文章整理一個目錄,方便更多的小伙伴去學習。 showImg(https://segmentfault.com/img/remote/1460000017490740?w=1920&h=1080); 個人前端文章整理 從最開始萌生寫文章的想法,到著手...
摘要:看下面一個例子優點使用構造器函數的好處在于,它可以在創建對象時接收一些參數。按照慣例,構造函數的函數名應始終以一個大寫字母開頭,以區分普通函數。返回該對象的源代碼。使您有能力向對象添加屬性和方法。 基本概念 ECMA關于對象的定義是:無序屬性的集合,其屬性可以包含基本值、對象或者函數。對象的每個屬性或方法都有一個名字,而每個名字都映射到一個值。 類 在現實生活中,相似的對象之間往往都有...
摘要:不會對空數組進行遍歷遍歷數組的每一項,數組當前項的下標,原數組函數內沒有執行,證明數組為空是并不執行遍歷返回一個新數組,長度等于原數組長度遍歷數組的每一項,數組當前項的下標,原數組即便函數返回空結果數組的 map() 不會對空數組進行遍歷 let arr = [] let newArr = arr.map((item, i, arr) => { ...
摘要:使用一元加模擬函數原理對非數值類型的數據使用一元加,會起到與函數相同的效果。中,若判斷不為則不再進行下一步操作。使用邏輯或設置默認值邏輯或也屬于短路操作,即當第一個操作數可以決定結果時,不再對第二個操作數進行求值。 善于利用JS中的小知識的利用,可以很簡潔的編寫代碼 1. 使用!!模擬Boolean()函數 原理:邏輯非操作一個數據對象時,會先將數據對象轉換為布爾值,然后取反,兩個!!...
摘要:很簡單,不是數組,但是有屬性,且屬性值為非負類型即可。至于屬性的值,給出了一個上限值,其實是感謝同學指出,因為這是中能精確表示的最大數字。如何將函數的實際參數轉換成數組 這篇文章拖了有兩周,今天來跟大家聊聊 JavaScript 中一類特殊的對象 -> Array-Like Objects。 (本文節選自 underscore 源碼解讀系列文章,完整版請關注 https://githu...
閱讀 3702·2021-11-23 09:51
閱讀 1360·2021-11-10 14:35
閱讀 4008·2021-09-22 15:01
閱讀 1279·2021-08-19 11:12
閱讀 379·2019-08-30 15:53
閱讀 1690·2019-08-29 13:04
閱讀 3429·2019-08-29 12:52
閱讀 3055·2019-08-23 16:14