javascript(基礎)_對數組的遍歷方法總結(find, findIndex, forEach,)


一、前言                                                                                                                                                                           

這篇文章主要對JS中數組遍歷的方法做一個總結:

                                                       1、find() findIndex()

                                                       2、forEach

                                                       3、every

                                                       4、map

                                                       5、reduce

 

 

二、主要內容                                                                                       

1、find()、findIndex()

     用法:用於找出第一個符合條件的數組成員,他的參數是一個回調函數,會遍歷所有元素,執行你給定的帶有條件返回值的函數,如果滿足了你給的條件函數,就返回第一個符合的元素,找不到返回undefined。

   

    下面封裝這個find()函數:

//要遍歷的數組
var users = [
 {id : 1, name: '張三'},
 {id : 2, name: '張三'},
 {id : 3, name: '張三'},
 {id : 4, name: '張三'},
 {id : 5, name: '張三'},
]

//在原型上定義一個方法,給他一個參數,這個參數的類型是一個函數
Array.prototype.myFind = function(conditionFun){
        
     //誰調用這個方法this就是誰
    for(var i=0; i< this.length; i++){
            //如果滿足了傳過來的那個條件函數,就返回當前的元素
        if(conditionFun(this[i], i)){
            return this[i]
        }
    }
}
//用數組調用
var ret = users.myFind(function (item, index) {
       
    return item.id === 2
})

console.log(ret)

 

 

 2、forEach()

   用法: foreach()函數會將數組從頭到尾遍歷一遍,可以在回調函數中傳三個參數,

 

var data = [1,2,3,4,5];

//只傳一個參數,item為數組元素
data.forEach(function (item){
    console.log(item)
})

//傳兩個參數,item為數組元素,index為元素下標
data.forEach(function (item, index){
    console.log(`${item}=========${index}`)
})

//傳三個參數,item為數組元素,index為數組下標,arr為數組

data.forEach(function (item, index, arr){
    console.log(`${item}=========${index}====${arr}`)
})

 

 

 

3、every

    用法:用於檢測數組中所有的元素是否都符合指定條件,這個條件通過回調函數傳遞。如果數組中有一個元素不滿足,則整個表達式返回false, 剩余的元素不再進行檢查。如果所有元素都滿足,則返回true

 

  用法如下:

function isBigEnough(element, index, array) {
  return (element >= 10);
}
var passed1 = [12, 5, 8, 130, 44].every(isBigEnough);
// passed1 is false
console.log(passed1)
var passed2 = [12, 54, 18, 130, 44].every(isBigEnough);
// passed2 is true
console.log(passed2)

 

4、some

用法:與every()的用法恰巧有點相反。some()方法用於檢測數組中的元素是否滿足指定條件,該條件由函數提供,會一次執行數組中的每一個元素,如果有一個滿足條件,整個表達式為true,剩余元素不在檢測。如果沒有滿足條件的,則返回false

用法如下:

function isBigEnough(element, index, array) {
  return (element >= 10);
}
var passed1 = [2, 5, 8, 6, 9].some(isBigEnough);
// passed1 is false
console.log(passed1)
var passed2 = [12, 54, 18, 130, 44].some(isBigEnough);
// passed2 is true
console.log(passed2)

 

5、include()

     用法:函數用來判斷是否包含指定的值,包含返回true,不包含返回false

    例子:

let site = ['runoob', 'google', 'taobao'];
 
site.includes('runoob'); 
// true 
 
site.includes('baidu'); 
// false

 

6、map

用法:map稱為映射,也是鍵值對集合,鍵不僅僅是字符串還可以是其他類型,比如對象。map()的參數是一個回調函數,會根據回調函數映射成一個新的數組

 方法一:

var data = [1,2,3,4]

var data2 = data.map(function (item) {
    return item*item   //這相當於將原來數組元素變成了它的平方
    //item*item  一定要給回調函數返回值,如果沒有會默認返回undefined
});

console.log(data2)

用法二:map()回調中第一個參數為對象,我們可以直接拿到對象里面的某個屬性

var users = [
  {name: "張三", "email": "zhang@email.com"},
  {name: "小王",   "email": "wang@email.com"},
  {name: "小紅",  "email": "hong@email.com"}
];

var emails = users.map(function (user) { return user.email; });

console.log(emails.join(", ")); // zhang@email.com, jiang@email.com, li@email.com

 

7、filter

用法:filter為篩選。filter() 的參數是一個過濾條件,這個條件是回調函數

var arr = [1, 2, 3, 4]
arr=arr.filter(function (item) {

    return item%2  //這里過濾掉了偶數,只留下奇數
})
console.log(arr)
arr = [1, 2]

 

用法二:獲得以zhang開頭的郵件

 
         
var users = [
  {name: "張三", "email": "zhang@email.com"}, {name: "小王", "email": "wang@email.com"}, {name: "小紅", "email": "hong@email.com"} ];

var
emailsZhang = users // 獲得郵件 .map(function (user) { return user.email; }) // 篩選出zhang開頭的郵件 .filter(function(email) { return /^zhang/.test(email); }); console.log(emailsZhang);

 

8、reduce() 函數可以理解為進去一堆,出來的是一個,參數接受的是一個回調函數

     arr.reduce(function(prev,cur,index,arr){
...
}, init);

arr 表示將要原數組;
prev 表示上一次調用回調時的返回值,或者初始值 init;
cur 表示當前正在處理的數組元素;
index 表示當前正在處理的數組元素的索引,若提供 init 值,則索引為0,否則索引為1;
init 表示初始值。

var arr = [1, 2, 3, 4, 5]
var sum = arr.reduce(function (prev, cur) {
    return prev + cur;
},0);
//這里傳入的初值為0,第一次計算0+1=1,的值作為下一輪的prev的值

1+2=3 繼續作為下一輪的orev值

reduce()方法參考:https://www.jianshu.com/p/541b84c9df90

 

 

 

                                                      

三、總結


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM