day 08 排序 ES5新增陣列方法 內建物件
1.選擇排序
var arr = [43,543,23,1,6];
function box(arr){
var temp = 0;
for (var i = 0; i < arr.length-1; i++) {
for(var j=i+1; j<arr.length; j++){
if(arr[i] > arr[j]){
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
return arr;
}
alert(box(arr));
2.sort排序
a.按照ASCII碼值排序
var arr = ["a",4,"*",3,"$"];//有特殊字元的元素也會根據ASCII碼值排序。
var arr = [3,4,15,3,17];//在比較一個數兩位數時,先比較第一位數,再比較第二位數,
結果為arr=[15,17,3,3,4]
b.arr.sort(function(){})
一個函式裡,用另一個函式作為引數傳遞,另一個函式叫回調函式。
sort(function(a,b){
//return a-b;//從小到大排序,改變了原來的排序方式(就是不再是按ASCII碼值進行排序了)。
return b-a;從大到小排序
})
c.隨機排序(先了解怎麼用就行)
例子:
var arr = [53,54,3,24,12];
for (var i = 0; i < 10; i++) {
arr.sort(function(a,b){
return Math.random()-0.5;
})
console.log(arr);
}
d.底層實現原理。(瞭解)
3.ES5新增陣列方法
1)forEach(function(item,index,array){});
a.傳遞一個回撥函式
b.這個回撥函式沒有返回值
c.回撥函式的引數
item:每個元素的值
index:元素的下標
array:每次遍歷的陣列。(這個一般不用,可以不寫)
例子
1)arr.forEach(function(item,index,array){
console.log(item,index,array);
});
2)作用forEach計算陣列所有元素的和
var sum = 0;
arr.forEach(function(item,index,array){
sum += item;
});
alert(sum);
2) indexOf();
arr.indexOf(值)
定義:檢測一某個元素在陣列中是否存在,如果存在返回這個元素的下標,如果不存在返-1
a.如果有兩個引數arr.indexOf(值,index)(index可以為負數,表示從陣列後面開始數,從哪裡開始找)
從index開始往右查詢這個值的下標;如果存在返回這個元素的下標,如果不存在返-1
b.如果一個數組中有兩個相同的值,按這種方式arr.indexOf(值);返回的是第一次出現這個數的下標
3)map();
這是一個對映的函式
方法傳遞一個回撥函式,回撥函式傳遞三個引數,引數與forEach一樣。
通過某個條件改變原陣列的值,改變後的值 會組成一個新的陣列返回。
例子:
var arr = [54,65,434,23,4];
var newArr = arr.map(function(item,index,array){
return item-5;
})
alert(newArr);
4)filter(function(item,index,array){});
這是一個過濾函式
方法傳遞一個回撥函式,回撥函式傳遞三個引數,引數與forEach一樣。
最終返回一個過濾後的陣列
過濾:通過某個條件,獲得符合這個條件的陣列元素,組成一個新陣列後返回。
例子:
var arr = [43,43,23,6,45,34];
var newArr = arr.filter(function(item,index,array){
return item<10;
})
alert(newArr);
5)reduce(); 歸併方法 從陣列下標為1的位置開始迴圈
例子: prev next
var arr = [53, 54, 3,24,12];
var sum = arr.reduce(function(prev,next){//pre 開始有個預設值,這裡的預設值是53.表示上一次操 作返回的結果
//next 表示 下一個數
document.write("return的結果是:"+prev+",迴圈輸出的是:"+next+"<br>")
return prev+next;
});
alert(sum)
4.instanceof();(關鍵字)
用來檢測某種引用資料型別的資料是屬於哪個物件。
不能用來檢測基本資料型別。
例子:
function box(){
}
alert(box instanceof Function);//true
var str="ll";(基本資料型別)
alert(str instanceof String);//false
5.擴充套件(瞭解)
精確檢測某種資料屬性哪個物件。
var type = Object.prototype.toString;
console.log(type.call("fke"));
console.log(type.call(5));
console.log(type.call(null));
console.log(type.call(undefined));
console.log(type.call(NaN));
console.log(type.call([]));
console.log(type.call(true));
console.log(type.call({}));
console.log(type.call(function(){}));
6.內建物件
window,String,Math,Number,Array,正則,Date
7.String 凡是物件,就會有屬性或方法
1)String的屬性:
(1)length:獲取字串的字元個數(只讀)
(2) 可以通過下標獲取字串的某個字元,但是不能修改
比如:str[2]:這種方式可以獲取不能修改
2)String的方法:
(1)str.charAt(index); //獲取str字串中index下標位置的字元
(2)str.charCodeAt(index);//獲取str字串中index下標位置的字元的ASCII碼值。
(3)String.fromCharCodeAt(ASCII碼值);//通過傳遞ASCII碼值獲取對應的字元。
(4)str.indexOf("字元",);//與陣列方法一樣
(5)str.lastIndexOf("字元",index);//和indexOf()相反,第二個引數不識別負數。
從後往前找到一個出現的字元,index不能為負數,但是是從前數,再往前找
(6)str.substr(index,num);//擷取字串,num:擷取num個字元,沒有num引數,擷取到最後。
(7)str.substring(index);//擷取字串,從index位置到最後
str.substring(index,i);//擷取字串,從index位置到i位置的字元,但不包含第i個。
(8)str.replace("str中的字元","被替換的字元");//替換,只能替換查到的第一個字串
(9)str.split("字串中的某個字元");把一個字串轉成陣列。
(10)toLowerCase();//把字串轉變為小寫
(11)toUpperCase();//把字串轉變為大寫
第一個字串變大寫
var str = "fljewkjfelkw";
str = str.charAt(0).toUpperCase() + str.substr(1);
alert(str);