本篇文章主要介紹了求JS數組的一些方法,具有很好的參考價值。
給定數組[25,28,8,65,25,32,40,68],求其最大值、最小值 、求和、平均值、排序、元素出現次數、去重等相關問題解決方法?
1、最大值和最小值的不同實現方法
1.1字符串拼接法:利用toString和join把數組轉換爲字符串,再和Math的max和min方法分別進行拼接,最後執行eval方法
var arr = [25,28,8,65,25,32,40,68];
var maxN = eval("Math.max(" + arr.toString() + ")");
var minN = eval("Math.min(" + arr.toString() + ")");
console.log("最大值爲:"+maxN);
console.log("最小值爲:"+minN);
或者 join
var arr = [25,28,8,65,25,32,40,68];
var maxN = eval("Math.max(" + arr.join() + ")");
var minN = eval("Math.min(" + arr.join() + ")");
console.log("最大值爲:"+maxN);
console.log("最小值爲:"+minN);
1.2排序法 :先把數組從小到大排序,數組第一個即爲最小值,最後一個即爲最大值
var arr = [25,28,8,65,25,32,40,68];
sort_arr(arr);
function sort_arr(arr){
arr.sort(function(a,b){return a-b;});
var minN = arr[0];
var maxN = arr[arr.length-1];
console.log("最大值爲:"+maxN);
console.log("最小值爲:"+minN);
}
1.3假設法: 假設數組第一個爲最大(或最小值),和後邊進行比較,若後邊的值比最大值大(或比最小值小),則替換最大值(或最小值)
var arr = [25,28,8,65,25,32,40,68];
var maxN = arr[0];
var minN = arr[0];
for(var i=1;i<arr.length;i++){
var cur = arr[i];
cur>maxN ? maxN=cur : null;
cur<minN ? minN=cur : null;
}
console.log("最大值爲:"+maxN);
console.log("最小值爲:"+minN);
1.4Math的max和min方法 :使用apply方法使數組可以作爲傳遞的參數
var arr = [25,28,8,65,25,32,40,68];
var maxN = Math.max.apply(null,arr);
var minN = Math.min.apply(null,arr);
console.log("最大值爲:"+maxN);
console.log("最小值爲:"+minN);
2、一個完全的方法求最大、最小、平均、求和
// 第一種方法
var arr = [25,28,8,65,25,32,40,68];
console.log("最大值爲:"+MaxNum(arr));
console.log("最小值爲:"+MinNum(arr));
console.log("和爲:"+SumNum(arr));
console.log("平均值爲:"+AverageNum(arr));
function MaxNum(arr) {
return Math.max.apply(null, arr);
}
function MinNum(arr) {
return Math.min.apply(null, arr);
}
function AverageNum(arr) {
var sum = eval(arr.join("+"));
var svg = (sum / arr.length * 100) / 100;
return svg;
}
function SumNum(arr) {
var sum = eval(arr.join("+"));
return sum;
}
// 第二種方法
var arr = [25,28,8,65,25,32,40,68];
console.log("最大值爲:"+arr.max());
console.log("最小值爲:"+arr.min());
console.log("和爲:"+arr.sum());
console.log("平均值爲:"+arr.avg());
function cacl(arr, callback) {
var ret;
for (var i = 0; i < arr.length; i++) {
ret = callback(arr[i], ret);
}
return ret;
}
Array.prototype.max = function () {
return cacl(this, function (item, max) {
if (!(max > item)) {
return item;
} else {
return max;
}
});
};
Array.prototype.min = function () {
return cacl(this, function (item, min) {
if (!(min < item)) {
return item;
} else {
return min;
}
});
};
Array.prototype.sum = function () {
return cacl(this, function (item, sum) {
if (typeof (sum) == 'undefined') {
return item;
} else {
return sum += item;
}
});
};
Array.prototype.avg = function () {
if (this.length == 0) {
return 0;
}
return this.sum(this) / this.length;
};
3、數組排序方式
3.1 JavaScript的sort()方法
var arr = [25,28,8,65,25,32,40,68];
arr.sort(compare);
console.log(arr);
function compare(val1,val2){
return val1-val2;
};
(1)sort()方法按照升序排列數組項,會調用每個數組項的toString()轉型方法,然後比較得到的字符串。
(2)toString()方法是把布爾值或BooleanObject轉換爲字符串,並返回結果。
(3)compare()函數方法是一個比較函數,作爲sort()方法的參數。
3.2 冒泡排序(從後向前)
var arr = [25,28,8,65,25,32,40,68];
sort(arr);
function sort(arr){
for(var j=0;j<arr.length-1;j++){
//兩兩比較,如果前一個比後一個大,則交換位置。
for(var i=0;i<arr.length-1-j;i++){
if(arr[i]>arr[i+1]){
var temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
}
}
(1)比較相鄰的元素。如果第一個比第二個大,就交換他們兩個位置。
(2)對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。
(3)針對所有的元素重複以上的步驟,除了最後一個。
(4)持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。
4、數組裏面的元素出現次數
var arr = [1,2,5,2,5,2,5];
console.log(arrNumber(arr)); //輸出{1: 1, 2: 3, 5: 3}
function arrNumber(arr){
var arr_number = {};
for(var i = 0 ; i < arr.length ; i++){
if(arr_number[arr[i]]){
arr_number[arr[i]]++
}
else{
arr_number[arr[i]] = 1 ;
}
}
return arr_number ;
}
5、數組去重
var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a'];
console.log(unique(arr))
去重之後的數組
以上寫的關於數組方面的方法,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果對你有用 點贊評論收藏 加關注^_^