1. 程式人生 > >js獲取陣列前n項的和

js獲取陣列前n項的和

使用的API

js獲取數字陣列前n項和方法,用js自帶的API Array.prototype.reduce方法
都可直接直接複製程式碼到console視窗下執行

簡單例子

var array = [0,1,2,3,4,5];
var front3Total = array.reduce(function(pre,cur,index,arr){
  if(index>3-1){
     return pre+0;
  }
  return pre+cur; 
});
front3Total;

自己進行封裝

簡單封裝下,把這方法擴充套件到陣列API中去,也就是Array.prototype中去

var array = [0,1,2,3,4,5];
Array.prototype.getNumArrayTotal = function(num){
var total = this.reduce(function(pre,cur,index,arr){
  if(index>num-1){
     return pre+0;
  }
  return pre+cur; 
});
return total;
};
console.log(array.getNumArrayTotal());//不傳引數,計算陣列項所有和
console.log(array.getNumArrayTotal(100));//超過陣列長度也是所有項之和

console.log(array.getNumArrayTotal(-1));//負數、0、1都是第一項的值,pre預設為第一項的值.
console.log(array.getNumArrayTotal(0));
console.log(array.getNumArrayTotal(1));

console.log(array.getNumArrayTotal(2));

繼續擴充套件

如何還想繼續擴充套件的話,比如普通陣列,裡面含有數字字串、boolean型別、數字、或者其他的,大家可以定義自己的規則再進行擴充套件。我這裡在擴充套件下,如果陣列項為數字字串、boolean 將其轉換成數字 然後在求和,其他型別不做求和。主要是型別的判斷和陣列第0項的處理.
var array1 = ["1",true,false,"2","asdf"]
Array.prototype.getNumArrayTotal1 = function(num){
var total = this.reduce(function(pre,cur,index,arr){
var cur = Number(cur);

if(index==1){//第0項要做特殊處理,如果第一項不能轉換成數字將其視為0
   var pre = Number(pre);
if(isNaN(pre)){
pre = 0;
}

if(index>num-1){
return pre+0;
   }
return pre+cur;
}
if(isNaN(cur)){//非數字不加當前項的值
return pre;
}else{//可以轉換數字
if(index>num-1){
return pre+0;
   }
   return pre+cur; 
}
 
});
return total;
};
console.log(array1.getNumArrayTotal1());//不傳引數,計算陣列項所有和
console.log(array1.getNumArrayTotal1(100));//超過陣列長度也是所有項之和
console.log(array1.getNumArrayTotal1(-1));//負數、0、1都是第一項的值
console.log(array1.getNumArrayTotal1(0));
console.log(array1.getNumArrayTotal1(1));
console.log(array1.getNumArrayTotal1(2));