js中數(shù)組<三>(第九篇)
直接上主題:
這篇介紹常用的、好用的js數(shù)組方法,有以下幾個
- map()
- reduce()
- filter()
- forEach()
map方法——求數(shù)組的映射
- 不改變元素組本身(但是可以自己在回調函數(shù)中改變)
先看例子:
例子1:有一個數(shù)組["連云港","杭州","廣州","蘇州"],求出對應所在的省份?
["江蘇","浙江","廣東","江蘇"],這個時候就可以使用map方法
例子2:有一分數(shù)數(shù)組[23,34,64,78,88,93,45],分數(shù)小于60的為不及格,大于等于六十小于90為及格,大于等于90為優(yōu)秀;
代碼實現(xiàn):
let arr = [23,34,64,78,88,93,45];
let arr1 = arr.map((value,index,arr) => {
if(value<60){
return "不及格";
}else if(value>=60&&value<90){
return "及格";
}else{
if(value>=90){
return "優(yōu)秀";
}
}
})
console.log(arr);
console.log(arr1);

如果上面的代碼配合js的簡寫方式就非常簡單如下:
let arr = [23,34,64,78,88,93,45];
let arr1 = arr.map(value => value < 60 ? "不及格" : value >= 60 ? "及格" : "優(yōu)秀");
console.log(arr);
console.log(arr1);
一行代碼就搞定,結果和上面是一樣的
參數(shù)詳解
語法
arr.map(function(currentValue,index,arr),thisValue)
參數(shù)說明:
<table >
<tr>
<th>參數(shù)</th>
<th>描述</th>
</tr>
<tr>
<td>function(currentValue, index,arr)</td>
<td>必須。函數(shù),數(shù)組中的每個元素都會執(zhí)行這個函數(shù)
函數(shù)參數(shù):
<table >
<tr>
<th>參數(shù)</th>
<th>描述</th>
</tr>
<tr>
<td>currentValue</td>
<td>必須。當前元素的值</td>
</tr>
<tr>
<td>index</td>
<td>可選。當前元素的索引值</td>
</tr>
<tr>
<td>arr</td>
<td>可選。當前元素屬于的數(shù)組對象</td>
</tr>
</table>
</tr>
<tr>
<td>thisValue</td>
<td>可選。對象作為該執(zhí)行回調時使用,傳遞給函數(shù),用作 "this" 的值。如果省略了 thisValue ,"this" 的值為 "undefined"</td>
</tr>
</table>
let arr = [2,5,6,7,8];
let arr1 = arr.map(function(value,index,arr,aaa){// 最后aaa用來測試傳入的參數(shù)個數(shù),也可以在程序中用arguments測試
console.log(value,index,arr,aaa,);//打印回調函數(shù)參數(shù)
if(value%2){
arr[index] = `${value}是${this.type2}`//改變原數(shù)組
return `${value}是${this.type2}`
}else{
return `${value}是${this.type1}`
};
},{type1:"奇數(shù)",type2:"偶數(shù)"});
console.log(arr);
console.log(arr1);

reduce方法——調用后數(shù)組返回一個值(從左到右)
例子1 最常用的就是可以用reduce方法求一個數(shù)組中元素的和:
let arr = [2,5,6,7,8];
let arr1 = arr.reduce(function(itme,value){
return itme+value;
})
console.log(arr); //值為:[2,5,6,7,8]
console.log(arr1); //值為:28
reduce方法中的參數(shù):
let arr = [2, 5, 6, 7, 8];
let arr1 = arr.reduce(function (itme,value) {
console.log(arguments);//函數(shù)的傳入?yún)?shù)
return itme+value;
console.log("能出來嗎?");//return后的不執(zhí)行
});

還有一個與reduce類似的方法 reduceRight(),reduce是從左向右計算,二reduceRight是從右往左計算,其參數(shù)都是一樣的,
filter() 檢查數(shù)組所有元素并返回符合要求的元素;
例子1: 一組成績表[12,65,78,48,89,98,88,38],求所有及格成績(分數(shù)大于等于60分的);程序實現(xiàn)同時查看函數(shù)的參數(shù):
let arr = [12, 65, 78, 48, 89, 98, 88, 38];
let arr1 = arr.filter(function (itme, value) {
console.log(arguments);
if (itme >= 60){
return itme;
}
});
console.log(arr);
console.log(arr1);

forEach() 列出數(shù)組中的每一個元素,非常常用的方法,和和for……of、for……in方法類似,用于數(shù)組的遍歷
例子1: 打印[1,5,6]這個數(shù)組中的每個元素同時將這個數(shù)組中元素接在[1,2,3]數(shù)組后面
實現(xiàn)代碼:
let arr = [1, 5, 6];
let arr1 = [1,2,3]
arr.forEach(function (value) {
console.log(arguments);
console.log(value)//遍歷數(shù)組arr中的值
this.push(value);//將數(shù)組arr中值添加到arr1中,其中this是forEach第二個參數(shù)指定的
}, arr1)//指定this,如果不指定這個參數(shù),或者指定為null、undefinded 則this指向全局對象
console.log(arr);
console.log(arr1);

<完>
20181028

發(fā)揮不廣泛