jQuery 数组全家桶 (最大、最小、求和、平均值、排序、元素出现次数、去重)的方法

本篇文章主要介绍了求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))

去重之后的数组

以上写的关于数组方面的方法,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果对你有用 点赞评论收藏 加关注^_^

发布了99 篇原创文章 · 获赞 98 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/tanqingfu1/article/details/105268593
今日推荐