js數組遍歷方法總結forEach、map、some、every、filter、reduce、reduceRight、while、for..in、for..of12種方法

數組遍歷方法,本文涉及到的方法大概有 do while、while、for、map、some、every、filter、reduce、reduceRight、forEach、for…in、for…of 12種方法。

一、do…while

與 while 相比,添加滿不滿足,都會執行一次;do…while 後面 花括號{ }爲可選項,不是必須;

var arr = [1,2,3,4] , count1 = 0, 
    k = arr.length;
do {
    // 代碼塊,條件不滿足,也會執行一次
    console.log(arr[count1]);
    count1++;  
} while (count1 < k)
{
   // 此代碼塊,可選項,不是必須。條件滿不滿足,都會執行一次
   console.log('條件滿不滿足,執行一次'); // 條件滿不滿足,執行一次
}
// 控制檯打印 1,2,3,4

二、while

只有當條件滿足纔會執行

var arr = [1,2,3,4], count = 0,  j = arr.length;
while (count < arr.length) {
    console.log(arr[count]);
    count++;
}
// 控制檯打印 1,2,3,4

三、for

我項目使用此方法居多;do…while、while 使用的比較少

for (let i = 0; i < arr.length; i++){
    console.log('for循環', arr[i]);
}

四、map

此方法有返回值,並且不會改變原數組,會返回一個新數組。

var arr = [1,2,3,4];
var returnA = arr.map(item => {
    return item * 2
})
console.log(returnA) // 打印 [2, 4, 6, 8]

五、some

此方法有返回值,並且不會改變原數組,數組中有一個條件滿足,就會返回true。

var arr = [1,2,3,4];
var returnB = arr.some(item => {
    return item > 2
})
console.log(returnB); // 打印 true 

六、every

此方法有返回值,並且不會改變原數組,數組中所有條件滿足,纔會返回true。與上面 some 恰好相反。

var arr = [1,2,3,4];
var returnC = arr.every(item => {
    return item > 2
})
console.log(returnC); // 打印 false 

七、filter

此方法有返回值,返會一個新數組,並且不會改變原數組,滿足條件的值放到一個新數組裏面返回。

var arr = [1,2,3,4];
var returnD = arr.filter(item => {
    return item > 2
})
console.log(returnD); // 打印 [3,4]

八、reduce

此方法有返回值,返回數組相加的結果,並且不會改變原數組。
curr: 當前值加上下一位值的和;
next: 當前循環下標下一位的值,
currentValue 當前循環的值;
thisArr 當前數組。
initialValue 可選。傳遞給函數的初始值(curr)

var arr = [1,2,3,4];

var returnE = arr.reduce((curr, next, currentValue, thisArr ) => {
    console.log(curr  , next, currentValue, currentIndex)
    return curr + next
},  initialValue);
console.log(returnE) // 打印 10

九、reduceRight

此方法有返回值,返回數組相加的結果,並且不會改變原數組。reduceRight 從數組最後一位開始遍歷,reduce 從數組第一位開始遍歷;
curr: 當前值加上下一位值的和;
next: 當前循環下標下一位的值,
currentValue 當前循環的值;
thisArr 當前數組。
initialValue 可選。傳遞給函數的初始值(curr)

var returnF = arr.reduce((curr, next, currentValue, thisArr ) => {
    return curr + next
}, initialValue );
console.log(returnF) // 打印 10

十、forEach

此方法沒有返回值,forEach循環函數裏面的 this 指的是 [1,2,3], 不能使用 es6 的箭頭函數,會影響this指向.
注意: forEach() 對於空數組是不會執行回調函數的 詳細查看此篇文章

var arr = [1,2,3];
// item:當前循環的值, index 當前值得下標, arr 當前循環的數組
var returnG  = arr.forEach(function(item, index, arr) {
  
    console.log('forEach', item, this);
}, [1,2,3])
// 第二個參數代表初始值
console.log(returnG); 
//forEach 1 (3) [1, 2, 3]
//forEach 2 (3) [1, 2, 3]
//forEach 3 (3) [1, 2, 3]

十一、for…in

for…in 用來循環數組或者對象,一般用來循環對象;下標 i 值 從0 開始;

var arr = [1, 2, 3];
for (leti in arr) {
    console.log(i, arr[i]);
}
// i 代碼當前循環數組的下標, arr[i] 代表當前下標的值
// 0 1
// 1 2
// 2 3
var obj = {
    name: 'jim',
    age: 18
}
for (let i in obj) {
    console.log(i, obj[i]);
}
// i:代表當前循環對象的屬性, obj[i]: 代表當前對象屬性的值,輸出 一下
// name jim
// age 18
// 給數組添加一個foo屬性
arr1.foo = '4';
console.log(arr); // [1, 2, 3, foo: "4"]
console.log(arr.foo) // 4
// 再次循環
for(let i of arr){
    console.log(i, arr[i-1])
}
 // 1 1
//  2 2
//  3 3
// foo 4  // **for..in 可以循環出來**

十二、for…of

for…of 與 for…in 基本上沒有區別,區別的地方
(1) 下標 i 值 從 1 開始,for…in 下標從0開始
(2)給數組添加 一個屬性arr.foo = ‘4’,使用for…of 不會循環出 foo屬性來。

// for..of
let arr = [1, 2, 3];
for(let i of arr){
    console.log(i, arr[i])
}
arr1.foo = '4';
console.log(arr); // [1, 2, 3, foo: "4"]
console.log(arr.foo) // 4
// 再次循環
for(let i of arr){
    console.log(i, arr[i-1])
}
 // 1 1
//  2 2
//  3 3  // **區別:for..of 不會循環出屬性來**

十三、find

找到第一個滿足測試函數的元素並返回那個元素的值,如果找不到,則返回;多個重複的值,也只是返回第一個;該方法有兩個參數
第一個 function(item, index, arr){}
第二個 thisValue

var arr = [1, 2, 3];
var returnH = arr.find(function(item, index, arr){
	// this  代表find 函數 第二個參數 [2]
	console.log(this)
	return item == 2;
}, [2]);

console.log(returnH); // 2

find 函數內部的this值得是 第二個參數,會輸出 [2]

十四、findIndex

找到第一個滿足測試函數的元素並返回那個元素的索引下標,如果找不到,則返回 -1;多個重複的值,也只是返回第一個值的下標,從0 開始;
該方法有兩個參數
第一個 function(item, index, arr){}
第二個 thisValue

var returnI = [1,2,2,3].findIndex(function(item){
	// this  代表第二個參數 [2]
    return item == 2
}, [3]);
console.log(returnI) // 1

findIndex 函數內部的this值得是 第二個參數,會輸出 [3]

以上是整理的數組和對象的循環方法,有不對的地方還望大家指出。希望大家可以點個贊,謝謝。

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