javaScript 第一篇 Array => filter 方法


//  filter
/** 

filter 爲數組中的每個元素調用一次 callback 函數,並利用所有使得 callback 返回 true 或 等價於 true 的值 的元素創建一個新數組。callback 只會在已經賦值的索引上被調用,對於那些已經被刪除或者從未被賦值的索引不會被調用。那些沒有通過 callback 測試的元素會被跳過,不會被包含在新數組中。

filter 不會改變原數組,它返回過濾後的新數組。

filter 遍歷的元素範圍在第一次調用 callback 之前就已經確定了。在調用 filter 
之後被添加到數組中的元素不會被 filter 遍歷到。如果已經存在的元素被改變了,
則他們傳入 callback 的值是 filter 遍歷到它們那一刻的值。
被刪除或從來未被賦值的元素不會被遍歷到。

*/
/**
 * 1,創建一個新的數組
 * 2,去掉數組中不符合條件的元素  (去掉空元素 無效元素)
 * 3,去掉數組中重複的元素
 * method: 
 * 
 * var new_array = arr.filter(callback(element[, index[, array]])[, thisArg])
 * new_array  一個新的通過測試的元素的集合的數組,如果沒有通過測試則返回空數組
 * callback 被調用時傳入三個參數:
       element 元素的值
       index   元素的索引
       array   被遍歷的數組
    thisArg  參數   
    1,未轉入 thisArg 參數 或轉入的是 null  undefine 時,默認的是爲 全局對象 (根據通常函數所看到的 "this"的規則確定的)
    2,轉入該參數時,在 callback 函數體中的 this 即指向該 thisArg (callback 的上下文 是 thisArg)
    3,當 callback  使用了箭頭函數時,thisArg 會被忽略,因爲箭頭函數的詞法上是自動綁定了this值
    
 */

let test = {
    number:100
}
var arr = [1, 2, 2,3,4,3];
var arr2 = arr.filter(function(x, index,self){ 
    console.log(this.number) //輸出 6次  100
    return self.indexOf(x)===index
},test);

//  //數組去重
// var arr = [1, 2, 2,3,4,3];
// var arr2 = arr.filter((x, index,self)=> self.indexOf(x)===index);
// console.log("------------------")  
// console.log(arr2); //[ 1, 2, 3, 4 ]

// //去掉數組中 空字符串、undefined、null
// var arr = ['1','2',null, '3',null,"1",undefined,''];
// var newArr = arr.filter(item => item)
// console.log(newArr)//[ '1', '2', '3', '1' ]




 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章