JS中關(guān)于數(shù)組的操作
1、如何創(chuàng)建數(shù)組:
var arr = []; //效率更高 var arr1 = new Array(); var arr2 = new Array(5); //數(shù)組的長(zhǎng)度為5,當(dāng)參數(shù)為一個(gè)時(shí),將會(huì)認(rèn)為指定的是數(shù)組的長(zhǎng)度 var arr3 = new Array("Saab","Volvo","BMW");
//數(shù)組里可以存儲(chǔ)字符串、數(shù)字、數(shù)組、對(duì)象等
2、字符串關(guān)于數(shù)組的方法:
2.1、把字符串分割成數(shù)組(split)
stringObject.split(separator, len) //separator:必需,字符串或正則表達(dá)式 len:可選,該參數(shù)可指定返回的數(shù)組的最大長(zhǎng)度
該方法根據(jù)第一個(gè)參數(shù)指定的字符而將字符串分割開(kāi),第二個(gè)參數(shù)是返回的數(shù)組長(zhǎng)度。該方法不會(huì)改變?cè)凶址?/p>
var str="How are you doing today?"; var arr=str.split(" "); //How,are,you,doing,today?
split() 方法用于把一個(gè)字符串分割成字符串?dāng)?shù)組。
3、數(shù)組本身的方法
參考:http://www.runoob.com/jsref/jsref-obj-array.html
3.1、判斷是否為數(shù)組(isArray)
isArray() 方法用于判斷一個(gè)對(duì)象是否為數(shù)組。
如果對(duì)象是數(shù)組返回 true,否則返回 false。
function myFunction() { var fruits = ["Banana", "Orange", "Apple", "Mango"]; var x = document.getElementById("demo"); x.innerHTML = Array.isArray(fruits); }
3.2、查找元素(indexOf)
indexOf() 方法可返回?cái)?shù)組中某個(gè)指定的元素位置,開(kāi)始位置的索引為 0 ,如果在數(shù)組中沒(méi)找到指定元素則返回 -1。
var fruits = ["Banana", "Orange", "Apple", "Mango"]; var a = fruits.indexOf("Apple"); //output 2
3.3、將數(shù)組轉(zhuǎn)換成字符串(join、toString)
join方法可以指定分隔符,toString方法無(wú)法指定分隔符
arrayObject.join(separator) //separator:可選,指定字符串所使用的分隔符,默認(rèn)是逗號(hào)
var names = ["David", "Cynthia", "Raymond", "Clayton", "Mike", "Jennifer"]; var namestr = names.join(); print(namestr); // David,Cynthia,Raymond,Clayton,Mike,Jennifer
namestr = names.toString(); print(namestr); // David,Cynthia,Raymond,Clayton,Mike,Jennifer
//事實(shí)上,當(dāng)直接對(duì)一個(gè)數(shù)組使用 print() 函數(shù)時(shí),系統(tǒng)會(huì)自動(dòng)調(diào)用那個(gè)數(shù)組的 toString() 方法
//print(names); // David,Cynthia,Raymond,Clayton,Mike,Jennifer
3.4、合并數(shù)組(concat)
concat() 方法用于連接兩個(gè)或多個(gè)數(shù)組。該方法不會(huì)改變現(xiàn)有的數(shù)組,而僅僅會(huì)返回被連接數(shù)組的一個(gè)副本。
var hege = ["Cecilie", "Lone"]; var stale = ["Emil", "Tobias", "Linus"]; var kai = ["Robin"]; var children = hege.concat(stale,kai);//Cecilie,Lone,Emil,Tobias,Linus,Robin
3.5、slice分割數(shù)組(返回一個(gè)新數(shù)組,不改變?cè)瓟?shù)組)
slice() 方法返回一個(gè)新的數(shù)組,包含從 start 到 end (不包括該元素)的元素,該方法不會(huì)改變?cè)紨?shù)組。
var fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"]; var citrus = fruits.slice(1,3); //Orange,Lemon
3.6、刪除或添加元素(splice)
var fruits = ["Banana", "Orange", "Apple", "Mango"]; fruits.splice(2,0,"Lemon","Kiwi"); //Banana,Orange,Lemon,Kiwi,Apple,Mango
array.splice(index,howMany,item1,.....,itemX) //index 必需。規(guī)定從何處添加/刪除元素 //howMany 必需。規(guī)定應(yīng)該刪除多少元素 //item1, ..., itemX 可選。要添加到數(shù)組的新元素
splice() 方法返回的是只包含被刪除的元素的新數(shù)組,而且會(huì)改變?cè)紨?shù)組
注意:這種方法會(huì)改變?cè)紨?shù)組。

3.7、刪除添加一個(gè)元素(pop、push、shift、unshift)
pop() 方法用于刪除數(shù)組的最后一個(gè)元素并返回被刪除的元素。
var fruits = ["Banana", "Orange", "Apple", "Mango"]; fruits.pop(); //fruits: Banana,Orange,Apple
push() 方法可向數(shù)組的末尾添加一個(gè)或多個(gè)元素,并返回新的長(zhǎng)度。
var fruits = ["Banana", "Orange", "Apple", "Mango"]; fruits.push("Kiwi") //fruits: Banana,Orange,Apple,Mango,Kiwi
shift() 方法用于把數(shù)組的第一個(gè)元素從其中刪除,并返回被刪除的第一個(gè)元素的值。
var fruits = ["Banana", "Orange", "Apple", "Mango"]; fruits.shift() //fruits: Orange,Apple,Mango
unshift() 方法可向數(shù)組的開(kāi)頭添加一個(gè)或更多元素,并返回新的長(zhǎng)度。
var fruits = ["Banana", "Orange", "Apple", "Mango"]; fruits.unshift("Lemon","Pineapple"); //fruits: Lemon,Pineapple,Banana,Orange,Apple,Mango
3.8、數(shù)組排序 (reverse、sort)
reverse() 方法用于顛倒數(shù)組中元素的順序,返回值是顛倒順序后的數(shù)組
var fruits = ["Banana", "Orange", "Apple", "Mango"]; fruits.reverse(); //Mango,Apple,Orange,Banana
sort()方法用于排序:如果元素是字符串類型,那么數(shù)組的排序方法 sort() 就非常好使;但是如果數(shù)組元素是數(shù)字類型,sort() 方法的排序結(jié)果就不能讓人滿意了:
var names = ["David","Mike","Cynthia","Clayton","Bryan","Raymond"]; names.sort(); print(names); // Bryan,Clayton,Cynthia,David,Mike,Raymond
sort() 方法是按照字典順序?qū)υ剡M(jìn)行排序的,因此它假定元素都是字符串類型,即使元素是數(shù)字類型,也被認(rèn)為是字符串類型。
var nums = [3,1,2,100,4,200]; nums.sort(); print(nums); // 1,100,2,200,3,4
為了讓 sort() 方法也能排序數(shù)字類型的元素,可以在調(diào)用方法時(shí)傳入一個(gè)大小比較函數(shù),排序時(shí),sort() 方法將會(huì)根據(jù)該函數(shù)比較數(shù)組中兩個(gè)元素的大小,從而決定整個(gè)數(shù)組的順序。
function compare(num1, num2) { return num1 - num2; } var nums = [3,1,2,100,4,200]; nums.sort(compare); print(nums); // 1,2,3,4,100,200
此時(shí)sort() 函數(shù)使用了 compare() 函數(shù)對(duì)數(shù)組按照數(shù)字大小進(jìn)行排序,而不是按照字典順序
3.9、數(shù)組迭代器方法(forEach、every、some、reduce、reduceRight、map、filter)
(1)、不生成新數(shù)組的迭代器方法(forEach、every、some、reduce、reduceRight):
forEach()方法接受一個(gè)函數(shù)作為參數(shù),對(duì)數(shù)組中的每個(gè)元素使用該函數(shù)。
function square(num) { print(num, num * num); } var nums = [1,2,3,4,5,6,7,8,9,10]; nums.forEach(square);
//output: 1 1 2 4 3 9 4 16 5 25 6 36 7 49 8 64 9 81 10 100
every()方法接受一個(gè)返回值為布爾類型的函數(shù),對(duì)數(shù)組中的每個(gè)元素使用該函數(shù)。
如果數(shù)組中檢測(cè)到有一個(gè)元素不滿足,則整個(gè)表達(dá)式返回 false ,且剩余的元素不會(huì)再進(jìn)行檢測(cè);
如果所有元素都滿足條件,則返回 true。
function isEven(num) { return num % 2 == 0; } var nums = [2,4,6,8,10]; var even = nums.every(isEven);//true
some() 方法也接受一個(gè)返回值為布爾類型的函數(shù),只要有一個(gè)元素使得該函數(shù)返回 true, 該方法就返回 true。
function isEven(num) { return num % 2 == 0; } var nums = [1,2,3,4,5,6,7,8,9,10]; var someEven = nums.some(isEven); //true
reduce() 方法接受一個(gè)函數(shù),返回一個(gè)值。該方法會(huì)從一個(gè)累加值開(kāi)始,不斷對(duì)累加值和數(shù)組中的后續(xù)元素調(diào)用該函數(shù),直到數(shù)組中的最后一個(gè)元素,最后返回得到的累加值。
function add(runningTotal, currentValue) { return runningTotal + currentValue; } var nums = [1,2,3,4,5,6,7,8,9,10]; var sum = nums.reduce(add); print(sum); // 顯示 55
reduceRight() 方法,和 reduce() 方法不同,它是從右到左執(zhí)行
function concat(accumulatedString, item) { return accumulatedString + item; } var words = ["the ", "quick ","brown ", "fox "]; var sentence = words.reduceRight(concat); print(sentence); // 顯示 "fox brown quick the"
(2)、生成新數(shù)組的迭代器方法(map、filter):
map() 對(duì)數(shù)組中的每個(gè)元素使用某個(gè)函數(shù),返回一個(gè)新的數(shù)組,該數(shù)組的元素是對(duì)原有元素應(yīng)用這個(gè)函數(shù)得到的結(jié)果。map 方法不改變?cè)瓟?shù)組。
array.map(function(currentValue,index,arr){}, thisValue)
function curve(grade) { return grade += 5; } var grades = [77, 65, 81, 92, 83]; var newgrades = grades.map(curve); print(newgrades); // 82, 70, 86, 97, 88
filter() 方法檢測(cè)數(shù)組元素,并返回一個(gè)符合條件的所有元素的新數(shù)組。該方法的參數(shù)即回調(diào)函數(shù)的返回值是布爾值。
function isEven(num) { return num % 2 == 0; } var nums = []; for (var i = 0; i < 20; ++i) { nums[i] = i+1; } var evens = nums.filter(isEven); print(evens); //2,4,6,8,10,12,14,16,18,20
4、數(shù)組中的其他方法
4.1、arr.find() 查找某個(gè)符合條件的元素
arr.find() 方法用于從數(shù)組中找到符合條件的第一個(gè)數(shù)組元素值,若找到則返回滿足條件的第一個(gè)元素,否則返回 undefined。
該方法有兩個(gè)參數(shù),第一個(gè)參數(shù)是一個(gè)回調(diào)函數(shù),第二個(gè)參數(shù)指定回調(diào)函數(shù)的 this 指針,第二個(gè)參數(shù)是可選的。
let arr = [{name: 'aaa',age: 12},{name: 'bbb',age: 22} ]
let obj = arr.find((item) => {
return item.name == 'bbb'
})
console.log(obj); //輸出 {name: "bbb", age: 22}

浙公網(wǎng)安備 33010602011771號(hào)