在網上找了很久,沒有很全面的,總是缺幾個,索性自己查一查資料總結一下子 1.1 for 迴圈 不過多解釋,大家都懂 實例: 輸出效果: for迴圈優化 :讓arr.length只獲取一次,不重覆獲取。 1.2 forEach 由數組繼承的Array對象的原型方法,在參數中可添加回調函數,回調函數可添 ...
在網上找了很久,沒有很全面的,總是缺幾個,索性自己查一查資料總結一下子
1.1 for 迴圈
不過多解釋,大家都懂
實例:
<script>
var arr = [1, 2, 3, 4, 7, 8, 9]
for (let i = 0;i < arr.length;i++) {
console.log(arr[i]);
}
</script>
輸出效果:
for迴圈優化 :讓arr.length只獲取一次,不重覆獲取。
<script>
var arr = [1, 2, 3, 4, 7, 8, 9]
for (let i = 0,len = arr.length;i < len;i++) {
console.log(arr[i]);
}
</script>
1.2 forEach
由數組繼承的Array對象的原型方法,在參數中可添加回調函數,回調函數可添加一個或多個參數。
參數包括:
currentValue
數組中正在處理的當前元素。
index
可選數組中正在處理的當前元素的索引。
array
可選forEach()
方法正在操作的數組。
實例:
<script>
var arr = [1, 2, 3, 4, 7, 8, 9]
arr.forEach(currentValue => {
console.log(currentValue);
});
</script>
輸出:
一般工作中都只加前面兩個參數,就是當前值和索引兩個參數
實例:
<script>
var arr = [1, 2, 3, 4, 7, 8, 9]
arr.forEach((element, index) => {
console.log('第' + index + '個數值為:' + element);
});
</script>
輸出
註意點:
forEach不會改變數組本身的值,因為他每次回調函數返回的都是undefined
,而且他不能被鏈式調用,但是不排除在回調函數里改變數組本身的值。最明顯的例子就是forEach不能像是Map一樣return改變數組本身的值。
實例:
<script>
var arr = [1, 2, 3, 4, 7, 8, 9]
var arr2 = arr.forEach((element, index) => {
console.log('第' + index + '個數值為:' + element);
return element * 2;
});
console.log(arr2);
</script>
輸出:
另外一個註意點:
就是forEach一旦開始無法使用return或者break來終止迴圈或者跳出迴圈。
這個就不上例子了,很好理解。
1.3 map
由數組繼承的Array對象的原型方法,在參數中可添加回調函數,回調函數可添加一個或多個參數。
參數包括:
currentValue
數組中正在處理的當前元素。
index
可選數組中正在處理的當前元素的索引。
array
可選forEach()
方法正在操作的數組。
和forEach最大的區別就是map可以通過return可以改變輸出值,但是不改變原數組值,而非單純的遍歷
實例:
<script>
var arr = [1, 2, 3, 4, 7, 8, 9];
const arr2 = arr.map(element => element * 2);
console.log(arr);
console.log(arr2);
</script>
輸出:
1.4 for-of
for-of可以迭代很多東西,包括包括 [Array
],[Map
],[Set
],[String
],[TypedArray
]對象等等。在這裡只解釋一下在數組中的迭代。
for (variable of iterable) {
//statements
}
variable
是在每次迭代中,將不同屬性的值分配給變數。
iterable
是被迭代枚舉其屬性的對象。
實例:
<script>
var arr = [1, 2, 3, 4, 7, 8, 9];
for (value of arr) {
console.log(value);
}
</script>
輸出:
與forEach的不同點就是支持return break和continue等操作。
1.5 for-in
For-in 在數組遍歷的時候與for -of不同的是他遍歷枚舉屬性,而像數組的值不是可枚舉屬性。可以說for-in不是合適的遍曆數組的方法。
舉個簡單的例子,這篇就不涉及for-in和for-of的更詳細的內容了,只需要知道for-in是遍歷枚舉屬性的方法,他不適合遍曆數組就OK了。
for-in 和 for-of和枚舉屬性等概念在這裡:https://www.cnblogs.com/wangzirui98/p/11227853.html
實例:
<script>
var arr = [1, 2, 3, 4, 7, 8, 9];
for (value in arr) {
console.log(value);
}
</script>
輸出:
所以輸出的都是枚舉屬性,不會輸出具體的值。
1.6 find 和 findIndex
準確的說find不是遍曆數組的,而是尋找數組中的具體的值的作返回的一個方法。他和findIndex非常相像,findIndex是返回具體的索引的。
他是由數組繼承的Array對象的原型方法,所以直接在數組上調用,他的方法體內需要一個回調函數,在數組每一項上執行的函數,接收 3 個參數:
element
當前遍歷到的元素。
index
可選當前遍歷到的索引。
array
可選數組本身。
他的返回值可以是具體的值,或者undefined(沒有找到符合要求的元素)
實例:
<script>
var arr = [1, 2, 3, 4, 7, 8, 9];
const res = arr.find(element => element > 3)
console.log(res);
</script>
輸出:4
所以說他不會返回具體一個數組,而是返回下一個的值。
findIndex同理:
<script>
var arr = [1, 2, 3, 4, 7, 8, 9];
const res = arr.findIndex(element => element > 3)
console.log(res);
</script>
輸出:3(PS:因為元素4在索引3上。這裡的3不是指3這個值)
1.7 filter
這個準確的說也不是用來遍歷的,顧名思義,它是用來篩選數組的。同樣,它裡面放一個回調函數,函數裡面放三個參數
element
數組中當前正在處理的元素。
index
可選正在處理的元素在數組中的索引。
array
可選調用了
filter
的數組本身。
實例:
<script>
var arr = [1, 2, 3, 4, 7, 8, 9];
const res = arr.filter(element => element > 3)
console.log(res);
</script>
輸出:
需要強調的是filter是通過回調函數返回的true或者false來返回不同的值來組成數組的。而且他不會改變原有的數組。
1.8 some 和 every
some和every遍曆數組的每個值然後返回一個布爾值。如果每個值運行回調函數都返回true或者都返回false,every會返回true或者false;如果有一個返回true,some會返回true,如果所有返回false則some會返回false。它們裡面放的這個回調函數裡面可以放三個參數:
element
數組中當前正在處理的元素。
index
可選正在處理的元素在數組中的索引。
array
可選調用了
filter
的數組本身。
實例:
<script>
var arr = [1, 2, 3, 4, 7, 8, 9];
let res = arr.some(element => element > 10)
console.log(res);
res = arr.some(element => element > 8)
console.log(res);
res = arr.some(element => element < 10)
console.log(res);
res = arr.every(element => element > 3)
console.log(res);
res = arr.every(element => element > 0)
console.log(res);
</script>
輸出:
1.9 reduce
reduce()方法接收一個函數作為累加器(accumulator),數組中的每個值(從左到右)開始合併,最終為一個值.
回調函數執行數組中每個值的函數(也可以叫做reducer),包含4個參數.
previousValue
上一次調用回調返回的值,或者是提供的初始值(initialValue)
currentValue
數組中當前被處理的元素
index
當前元素在數組中的索引
array
調用reduce的數組
實例:
<script>
var arrString = 'abcdaabc'
// 獲取字元中中每個字母出現的次數
let count = arrString.split('').reduce(function (res, cur) {
res[cur] ? res[cur]++ : res[cur] = 1
return res
}, {})
console.log(count)
</script>
輸出:
僅是自己總結,要瞭解全面的話還是需要去查文檔,推薦MDN上仔細閱讀文檔:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array