在程序中,我們經常會遇到將數組或者字符串反序排列
1.數組的反序排列
看看下面的代碼
function reverse(a){ var len = a.length;//獲取數組的長度 var mid = parseInt(len/2);//獲取數組長度的中間值,由於有可能是不是整數,將得到的數字轉為整數 //利用交換的思想,將數組內的元素放在相應的地方,循環次數為mid+1次 for(i = 0;i <= mid;i++){ var temp = a[i]; a[i] = a[len-1-i]; a[len-1-i] = temp; } return a; }
var arr = [1,2,3,4,5,6,"m",8,9]; reverse( arr);
看看結果:
數組的反序排列與冒泡排序的思想十分相似,后者是比較大小進行交換以達到有序的排序,前者是數組對應內容交換,以達到數組反序排列。
2.字符串反序排列
字符串反序排列有很多種思路,這里介紹一種,
先看下代碼:
function revert( a ){ var a_result = new Array(); while( a.length ){ a_result.push( a.pop() );//使用pop方法刪除並返回原數組中的最后一個元素,使用push()方法將返回的元素添加到新的數組末尾。
} return a_result.join("");//使用join()方法將得到的字符反序數組,放入到一個字符串中
} var str = "abcd"; var arr_str = str.split("");//使用splitr()方法將字符串分割成字符串數組
revert( arr_str );
來看結果:
這種思路中用了很多的字符串函數。
2.1 使用split()函數將字符串分割成字符串數組;
來看看詳細介紹
語法
stringObject.split(separator,howmany)
參數:
separator:必需。字符串或正則表達式,從該參數指定的地方分割 stringObject。
howmany:可選。該參數可指定返回的數組的最大長度。如果設置了該參數,返回的子串不會多於這個參數指定的數組。如果沒有設置該參數,整個字符串都會被分割,不考慮它的長度。
返回值:一個字符串數組。該數組是通過在 separator 指定的邊界處將字符串 stringObject 分割成子串創建的。返回的數組中的字串不包括 separator 自身。
提示:如果把空字符串 ("") 用作 separator,那么 stringObject 中的每個字符之間都會被分割。在本例中,就是使用("")用作separator。但是join()的功能是split()函數相反,是用來連接字符串。
例子:
//返回一部分字符串 "hello".split("",3);//可返回["h","e","l"]
2.2使用pop()函數用於刪除並返回數組的最后一個元素。
語法
arrayObject.pop()
返回值:返回數組arrayObject的最后一個值提示:pop()方法會將數組長度減1,刪除並返回數組的最后一個元素。如果數組為空,pop()並不改變數組,會返回“undefined”;
2.3使用push()函數將,pop()函數返回的數,放在結果數組中;
push()方法可向數組的末尾添加一個或多個元素,並返回新的長度。
語法:
1 arrayObject.push(element1,element2,...);
提示:push()方法,會返回數組的新的長度;
2.4 使用join()函數將數組中的值連接成字符串;
join(),方法用於把數組中的所有元素放入一個字符串。元素是通過指定的分隔符進行分隔的。
語法
arrayObject.join(separator)
參數:separator可選。指定要使用的分隔符。如果省略該參數,則使用逗號作為分隔符。
返回值:返回一個字符串。該字符串是通過把 arrayObject 的每個元素轉換為字符串,然后把這些字符串連接起來,在兩個元素之間插入 separator字符串而生成的。
例子
var arr = new Array("a","c","b"); arr.join("");//結果是"acb" arr.jion(".");//結果是"a.c.b"
當然還有一種方法,反序字符串,就是使用上面例子中的交換思想。個人認為,使用javascript字符串函數效率高。
看看使用交換,怎么寫。
function revert(a){ var len = a.length;//獲取數組的長度 var mid = parseInt(len/2);//獲取數組長度的中間值,由於有可能是不是整數,將得到的數字轉為整數 //利用交換的思想,將數組內的元素放在相應的地方,循環次數為mid+1 次 for(i = 0;i <= mid;i++){ var temp = a[i]; a[i] = a[len-1-i]; a[len-1-i] = temp; } return a.join(""); }
var str = "abcd";
var arr_str = str.split("");//使用splitr()方法將字符串分割成字符串數組
revert( arr_str );