數組的應用
a.順序查找
var a = [3,7,11,57,94,34,47,35,23,12];
var num = Number(prompt("請輸入要查找的值"));
var index = -1;//最初認爲要找的數不在數組中
for(var i in a){
if(a[i] == num){
index = i;
break;
}
}
alert(index);
這種查找方法最簡單,但是查找次數與數據量成正比,效率不高。
b.折半查找(二分查找)
假設在一個已經有序的數組中,可以利用折半查找大幅提高效率。
<script>
/*
* 思路:
* (1)用start表示查找範圍的起點,end表示終點
* (2)只要start<=end就重複步驟(3)
* (3)和中間(mid)的那個數進行比較
* a.相等:找到了,結束
* b.大於:在前半段找,即end=mid-1
* c.小於:在後半段找,即start=mid+1
* (4)輸出查找結果
* log2n
* */
var a = [3,7,11,12,23,34,35,47,57,94];
var num = Number(prompt("請輸入要查找的值"));
var index = -1;//最初認爲要找的數不在數組中
var start = 0;
var end = a.length-1;
while(start<=end){
var mid = Math.ceil((start+end)/2);
if(num == a[mid]){
index = mid;
break;
}else{
if(num > a[mid]){
//在後半段找
start = mid+1;
}else{
//在前半段找
end = mid-1;
}
}
}
alert(index);
</script>
折半查找的最壞查找次數和數據量的關係是對數關係,所以說它的查找效率很高,但是任何事情往往都有兩面性,它的高效率也是有代價的,也就是要求有序。
(2)排序(冒泡排序)
<script>
var a = [3,7,11,43,87,5,99,22,51,8];
for(var i=0; i<a.length-1; i++){
for (var j=0; j<a.length-1-i; j++) {
var temp;
if (a[j] > a[j + 1]) {
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
alert(a);
</script>
冒泡排序的代價也是比較大的,很多時候做的是無用功,選擇排序進行了優化。
選擇排序
(3)隊列
先進先出(FIFO),在頭部出隊(shift()),在尾部入隊(push())
var a = [];
a.push(1);
document.write(a.toString()+"<br>");
a.push(2);
document.write(a.toString()+"<br>");
a.push(3);
document.write(a.toString()+"<br>");
a.shift();
document.write(a.toString()+"<br>");
a.shift();
document.write(a.toString()+"<br>");
a.shift();
document.write(a.toString()+"<br>");
(4)堆棧
先進後出(FILO),在尾部進棧(push()),在尾部出棧(pop())
var a = [];
a.push(1);
document.write(a.toString()+"<br>");
a.push(2);
document.write(a.toString()+"<br>");
a.push(3);
document.write(a.toString()+"<br>");
a.pop();
document.write(a.toString()+"<br>");
a.pop();
document.write(a.toString()+"<br>");
a.pop();
document.write(a.toString()+"<br>");
常用對象
2.1字符串
字符串的定義:定義一個變量,然後直接將字符串賦值給它。
var str = “abc123”;
字符串實際上是字符組成的數組,所以數組的方法它基本上都有。
(1)訪問字符串裏面的字符:
a.和數組的方式一樣(str[i])
b.字符串特有的方式charAt(i)
(2)查找
a.數組方式:indexOf
b.字符串方式:search方法:傳入參數(要搜索的子串),返回子串的第一個字符在父串的下標。這個方法對大小寫敏感。
search()方法的功能比indexOf更強大,它可以使用正則表達式形式來查找
(3)取子串
a.數組方式:slice():傳入參數開始下標和結束下標,並返回子串
b.字符串特有的方法:
substr(start,length):傳入參數開始下標和截取長度,取子串,如果沒有第二個參數,會截取到最後。
substring(start,end):傳入兩個參數,第一個參數,開始截取的下標,第二個是截取結束的下標。
(4)替換
a.數組方式:splice()
b.字符串方式:replace():替換字符串中的子串,有兩個參數,第一個是要被替換的子串,第二個參數是替換的新的子串。
toUpperCase():小寫字母轉換爲大寫字母
var str = prompt("請輸入一個英文字符串");//abc
Str = str.toUpperCase();
alert(str);//ABC
toLowerCase():大寫字母轉換爲小寫字母
charCodeAt():獲取字符串某一個位置字符的Unicode編碼
fromCharCode():將某個Unicode字符編碼轉換爲對應的字符
<script>
var str = prompt("請輸入一個英文字符串");
var result = "";
for(var i=0; i<str.length; i++){
var char = str.charAt(i);
var code = char.charCodeAt();//轉成ASCII
alert(char);
if(code>=97 && code<=122){
code = code - 32;
char = String.fromCharCode(code);
}
result += char;
}
alert(result);
</script>
trim():去除字符串兩邊的空格符
var
str
= " 請輸入一個英文字符串 ";
str
= str.trim();
alert(str);
split(x):字符串的分割。用字符串“x”進行分割。分割之後是一個數組
數組有一個toString方法,將數組轉換成字符串,元素之間用逗號隔開
var
a = "a b c";
var result =
a.split(" ");
alert(result);//["a","b","c"]
2.2日期
定義:
var d = new Date();
var d = new Date(2017,3,22,8,30,22;
不給參數,定義的日期爲執行這條指令時那一刻的系統的時間,當然也可以指定年月日時分秒參數,但是要特別注意的是從0開始,即0表示1月
修改日期分量:
setYear()、setMonth()、setDate()……
獲取日期分量:
getYear()、getMonth()
getMilliseconds()是獲取毫秒分量
getTime()獲取的是1970-1-1 00:00:00至指定日期所經歷的毫秒數
日期轉換成字符串
var d = new Date(2017,3,22,8,30,22);
document.write(d.toString()+"<br>");
document.write(d.toDateString()+"<br>");
document.write(d.toLocaleDateString()+"<br>");
document.write(d.toLocaleTimeString()+"<br>");
document.write(d.toTimeString()+"<br>");
document.write(d.toUTCString()+"<br>");
日期運算
d1>d2
d1-d2:兩個日期相隔的毫秒數
便捷計算某月天數的方法
var month = 2;
var d = new Date(2017,month,0);
document.write(d.getDate()+"<br>");
2.3其它對象
Math對象
Math.max(n1,n2……):取得一組數據中的最大值
Math.min(n1,n2……):取得一組數據中的最小值
Math.PI:圓周率,π的值
Math.E:算術常量e,自然對數的底數
Math.pow(x,y):計算x的y次方
Math.sqrt(x):返回數的平方根
Math.abs(x):返回x的絕對值
Math.floor(x):對x向下取整
Math.ceil(x):x向上取整
Math.round(x):x四捨五入
Math.random():獲取一個0~1的隨機數
Number對象
toExponential():科學計數法表示,指數計數法,
var e = 10000;
var n = e.toExponential();
alert(n);//1e+4,string
toFixed(x):保留x位小數,並把數字轉換爲字符串,四捨五入
var e = 1.123;
e = e.toFixed(2);
alert(e);//1.12
toPrecision(x):將數字保留x位,並且返回的是string類型
var a = 1.23243;
var b = a.toPrecision(4);
alert(b);//1.232