項目上,經常需要對數組操作。所以,本文重點講解Array類型的一些常見的操作方法。 ...
所有對象都具有toString(),toLocaleString(),valueOf()方法。
1.數組轉化為字元串
toString(),toLocaleString() ,數組調用這些方法,則返回由數組每項字元串形式拼接而成的、以逗號分隔的字元串。實際上,為了創建這個字元串,會調用數組的每一項的toString()方法。
valueOf() 返回對象的原始值。
var color = ["red","green","blue"]; console.log( color.toString());//red,green,blue console.log( color.toLocaleString());//red,green,blue console.log(color.valueOf());//["red", "green", "blue"]
join()函數,接收一個分隔符的參數,將拼接成以分隔符連接的字元串。
console.log(color.join("|"));// red|green|blue
註:alert()函數接收的參數必須是字元串,如果參數不是字元串,比如說是對象,則在後臺預設調用參數的toString()方法。
2.數組元素的添加與刪除
push()向數組最後一位添加元素,返回添加後的數組的長度
pop() 刪除數組最後一位元素,返回刪除的項
shift() 刪除數組首位元素,返回刪除的項
unshift() 向數組首位添加元素,返回添加後的長度。
3.數組重排序方法
reverse() 翻轉數組項的順序;如:
var arr = [1,2,3]; console.log(arr.reverse());// [3,2,1]
sort() 數組排序。在後臺會調用數組中的每一項的 toString()方法,先轉換為字元串,然後再比較。按照從小到大排序。如:
var values = [0,1,5,10,15]; console.log(values.sort()); // [0,1,10,15,5]
可能上面並沒有得到我們想要的結果,我們可能想要按照數字大小來排序的。
那麼可以給sort()函數傳遞一個比較函數作為參數,比較函數接受兩個參數,
如果參數1大於參數2,則返回一個正數;
如果參數1小於參數2,則返回一個負數;
如果參數1等於參數2,則返回0;
如:
function compare(value1,value2){ if(value1 > value2){ return 1; }else if(value1 == value2){ return 0; }else{ return -1; } } console.log(values.sort(compare));//[0, 1, 5, 10, 15]
上面compare()函數,也可以改寫如下,執行跟上面一樣:
function compare(value1,value2){ return (value1 - value2); }
4. 數組和字元串的方法
concat();向數組末尾添加新的元素。如果是字元串調用這個方法,則是向字元串末尾拼接新的字元串。
slice();截取數組中的某些項。如果是字元串調用這個方法,則是截取字元串中的某些字元。可接受兩個參數。
splice(); 修改數組中的某些項。詳細請見:MDN的網站上的手冊:Array.prototype.splice()。
indexOf();查找數組中的某項元素第一次出現在數組中的位置 。接受兩個參數,即要查找的項,和查找起點位置的索引。
lastIndexOf();類似於indexOf(),但是它是從數組的末尾查找。字元串也有這兩個查找元素的方法。都返回元素在數組或者字元串中的位置的索引,如果沒有找到,則返回-1。
下麵看一個容易出錯的小例子:
var person = {name: "Nicholas"}; //這是一個對象 var people = [{name: "Nicholas"}]; // 這是一個數組,包含一個元素,且這個元素是對象 var morePeople = [person];//這是一個數組,包含一個元素,且這個元素也是一個對象 console.log(people.indexOf(person));// -1 console.log(morePeople.indexOf(person)); // 0
為什麼第一個語句列印出-1呢,那麼說明 people 這個數組裡面不包含person這個對象,原因在此:
console.log(people[0] == person);//false 不屬於同一個對象
說明 people 數組裡面的那個對象元素跟person這個對象並不是同一個對象,雖然內容都一樣。後面會講到面向對象,你將會理解為什麼看似內容一樣,但是為什麼他們並不是同一個對象。
這幾個數組與字元串的方法,都是基於他們的副本操作的,也就是說,不影響原來操作的變數。
5.數組的迭代方法
數組的迭代,用我自己的話說就是數組的遍歷,即遍曆數組的每一項,去執行某些操作。
ES5中為數組定義了5個迭代方法。都接受兩個參數,第一個參數:數組中每一項要執行的函數;第二個參數可選:執行該函數的作用域,影響this的值。
作為第一個參數的函數,接受三個參數:數組項的值、該項在數組中的位置、數組對象本身。
every();對數組中每一項都執行函數,如果每一項返回true,則返回true;(返回布爾值)
some();……………………………………. ,如果有一項返回true,則返回true;(返回布爾值)
filter();……………………………………… ,返回 true 項組成的數組(返回數組)
map();……………………………………… .,返回所有項組成的數組(返回數組)
forEach();……………………………………,沒有返回值
var numbers = [0,1,5,10,15]; var resultNumbers = numbers.every(function(item,index,numbers){ return (item > 5); }); console.log(resultNumbers);// false; var resultNumbers2 = numbers.some(function(item,index,numbers){ return (item > 5); }); console.log(resultNumbers2);// true; var resultNumbers3 = numbers.filter(function(item,index,numbers){ return (item > 5); }); console.log(resultNumbers3);// [10, 15]; var resultNumbers4 = numbers.map(function(item,index,numbers){ return (item * 2); }); console.log(resultNumbers4);// [0, 2, 10, 20, 30] var resultNumbers5 = numbers.forEach(function(item,index,numbers){ return (item * 2); }); console.log(resultNumbers5);// undefined 因為沒有返回值,所以,即使你return,也會列印出 undefined;
6.數組的歸併方法
reduce(),reduceRight()。迭代數組的所有的項,最終返回一個值。詳細見:MDN 的Array.prototype.reduce()
更詳細的關於數組的操作方法,後面會更新補充。
原文鏈接:http://www.1024idea.com/archives/358