陣列 迭代器方法
阿新 • • 發佈:2022-03-29
這些方法的引數都是函式,可以對陣列中的每一個元素運用該函式,原陣列不變。
1、不生成新陣列 的迭代器方法
(1) forEach() :對陣列中的每一項執行給定函式,沒有返回值,它和使用for迴圈的結果相同
function square(num) { console.log(num * num); } var nums = [1,2,3,4,5,6,7,8,9,10]; nums.forEach(square); var data=[1,2,3]; data.forEach(function(item,index,array){ console.log(item*item); console.log(array.concat(array)); }) //item 指代元素值,index 指代元素索引,array 指代陣列本身,形參位置固定
(2) every():對陣列中的每一項執行給定函式,如果該函式對每一個項都返回true,則返回true;
反之,有一個值是false就返回false(預設返回false)。
function isEven(num) {
return num % 2 == 0;
}
var nums = [2,3,4,6,8,10];
var even = nums.every(isEven); //every
console.log(even);//
//也可參照上面匿名函式的例子,給every接收的函式傳參(item,index,array)
(3) some():對陣列中的每一項執行給定函式,如果該函式對任一一項返回true,則返回true(預設返回false)。
function isEven(num) {
return num % 2 == 0;
}
var nums = [1,3,,,10,];
var someEven = nums.some(isEven); //some
console.log(someEven);
//也可參照匿名函式的例子,給every函式傳參(item,index,array)
2、生成新陣列 的迭代器方法
(1) map():對陣列中的每一項執行給定函式,返回每次函式呼叫的結果組成的陣列。
function curve(grade) { return grade += 5; } var grades = [77, 65, 81, 92, 83]; var newgrades = grades.map(curve); //map console.log(newgrades); var data=[1,2,3]; var result4=data.map(function(item,index,array){ return item*2; }) console.log(result4);
(2) filter():傳入一個返回值為布林型別的函式。
和every()方法不同的是, 當對陣列中的所有元素應用該函式,結果均為 true 時,該方法並不返回true,而是返回一個新陣列,該陣列包含應用該函式後結果為 true 的元素。
function isEven(num) {
return num % 2 == 0;
}
var nums = [];
for (var i = 0; i < 20; ++i) {
nums[i] = i+1;
}
var evens = nums.filter(isEven); //filter
console.log(evens);
累加方法
-
reduce和reduceRight:使用指定的函式對陣列元素進行組合,生成一個值,接收兩個引數。
var numbers = [1,2,23,34,5,6,78,98,900]; numbers.reduce(function(previousValue, currentValue, index,array){ return previousValue + currentValue ; },initialValue);
詳細解釋:
– 引數一:要執行的函式,有返回值,函式內部處理的引數如下
- previousValue (上一次呼叫回撥返回的值,或者是提供的初始值(initialValue))
- currentValue (陣列中當前被處理的元素)
- index (當前元素在陣列中的索引)
- array (呼叫 reduce 的陣列)
– 引數二:傳遞給函式的預設值,可忽略
– reduce從左向右操作,reduceRight表示從右向左操作
[x1, x2, x3, x4].reduce(f) = f(f(f(x1, x2), x3), x4) //有點像遞迴 //看了程式碼也不一定懂,那我們就多看幾個程式碼
常規用法有哪些?
求累加:
var a = [1,2,23,34,5,6,78,98,900]; var n = a.reduce( function (x, y) { return x + y; } , 0); //引數一匿名函式function,為要執行的函式 //引數二為0,函式的預設起始值,即第一次執行0將被賦值給previousValue;
求累積:
var a = [1,2,23,34,5,6,78,98,900]; var m = a.reduce(function (x, y) { return x*y; } ,1)
求陣列最大值:
var a = [1,2,23,34,5,6,78,98,900]; var max = a.reduce(function (x, y) { return x>y?x:y; });