如果不均勻度是指奇偶性的話,代碼如下:
function test(str) { var arr = str.split(" "); var even = arr.filter(v=>!(v%2)); var odd = arr.filter(v=>!!(v%2)); return isNaN(+even)?+odd:+even;
}
如果不均勻度指不符合等差數(shù)列的項(xiàng)的話,代碼如下:
function test(str){ var arr = str.split(" ");
//數(shù)組長度小于3拋出錯(cuò)誤
if(arr.length < 3){ throw new Error("Array length can't less than 3.");
} //數(shù)組長度為3時(shí)不能從等差數(shù)列判斷
//假如數(shù)組中有兩個(gè)元素相同,則返回剩下的一個(gè)元素
if(arr.length == 3){ var r = arr.filter(v=>v!=a[0]); return r.length==1 ? +r : a[0];
}
//數(shù)組長度大于3
var d = []; //儲存數(shù)列中每兩個(gè)元素間的等差項(xiàng) 如: [1,2,6,4]=>[1,4,-2]
arr.reduce(function(p,n){
d.push(n-p); return n;
});
//d[0]的值是否唯一
var d0u = !isNaN(+d.filter(v=>v==d[0]));
//d[1]的值是否唯一
var d1u = !isNaN(+d.filter(v=>v==d[1]));
if(d0u && d1u){ if(d[0]+d[1]==2*d[2]) //例: arr:[0,1,0,0], d:[1,-1,0]
return +arr[1]; else //例: arr:[0,0,1,0], d:[0,1,-1]
return +arr[2];
}else if(d0u){ //例: arr:[1,0,0,0], d:[-1,0,0]
return +arr[0];
}else if(d1u){ //例: arr:[0,0,1,0,0], d:[0,1,-1,0]
return +arr[2]; //以上是從arr前3項(xiàng)不能推出正確等差數(shù)列的特殊情況
}else{ //一般情況:arr[0],arr[1],arr[2]為等差項(xiàng),可以直接推導(dǎo)等差數(shù)列的通項(xiàng)公式
// d[0]為數(shù)組的公差,arr[0]為首項(xiàng),篩選出不符合數(shù)組通項(xiàng)公式的數(shù)組元素
return +arr.filter((v,i)=>v!=(+arr[0]+i*d[0]));
}
}