34、数组声明式系列方法的使用
(1)产生一个每个元素都比原来大10的新数组map
function addTen(arr){
return arr.map((item,index)=>{
return item+10;
})
}
(2)得到数组中所有奇数的和reduce
function getAdd(arr){
arr.reduce((pretotal,item,index)=>{
return item%2 === 1 ? pretotal+item:pretotal;
},0)
}
(3)得到值大于8且为偶数的filter
function filterArr(arr){
return arr.filter((item,index)=>{
return item>8&&item%2===0;
})
}
(4)找出一个值大于8且下标是偶数的元素find
function getArr(arr){
return arr.find((item,index)=>{
return item>8&&index%2===0;
})
}
(5)找出一个值大于8且下标是偶数的元素的下标findIndex
function getArrindex(arr){
return arr.findIndex((item,index)=>{
return item>8&&index%2===0;
})
}
(6)判断下标为偶数的元素是否都是奇数every
funcrion getConfirm(arr){
return arr.every((item,index)=>{
//下标为奇数或者下标为偶数值都是奇数的元素
return index%2 === 1 || (index%2 === 0 && item % 2 === 1)
})
}
(7)是否有下标为偶数的元素值为奇数some
funcrion getConfirm(arr){
return arr.some((item,index)=>{
//下标为奇数或者下标为偶数值都是奇数的元素
return index%2 === 1 || (index%2 === 0 && item % 2 === 1)
})
}
自定义数组声明式方法
Array.prototype.map = function(callback){
const arr = [];
//遍历当前数组,调用callback得到一个结果数据,添加到arr
for(let i = 0;i < this.length;i++){ //this就是原数组
const element = this[i];
arr.push(callback(element,i))
}
return arr;
}
Array.prototype.redece = function(callback,initialVal){
let result = initialVal;
for(let i = 0;i < this.length;i++){
//recude三个参数,上一次的累加结果,value,index;上一次累加结果由callback决定
result = callback(result,this[i],i)
}
return result;
}
//调用callback得到一个boolean值,如果为true那么就将值push到结果中去
Array.prototype.filter = function(callback){
const result = [];
for(let i = 0;i < this.length;i++){
if(callback(this[i],i)){
result.push(this[i]);
}
}
return result;
}
//遍历当前数组,调用callback,返回boolean值,如果为true那么就返回这个值
Array.prototype.find = function(callback){
for(let i = 0;i < this.length;i++){
const element = callback(this[i],i)
const result = this[i];
if(element){
return result;
}
}
return undefined; //没有匹配的返回undefined
}
//遍历当前数组,调用callback,返回boolean值,如果为true那么就返回这个值
Array.prototype.findIndex = function(callback){
for(let i = 0;i < this.length;i++){
if(callback(this[i],i)){
return i;
}
}
return -1; //没有匹配的返回undefined
}
//遍历,一点callback返回false,那么返回false,都不为false,返回true
Array.prototype.every = function(){
let result = true;
for(let i = 0;i < this.length;i++){
if(!callback(this[i],i)){
result = false
}
}
return result;
}
//一旦callback为true返回true否则返回false
Array.prototype.some = function(){
let result = false;
for(let i = 0;i < this.length;i++){
if(callback(this[i],i)){
result = true
}
}
return result;
}