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))
去重之后的数组
以上写的关于数组方面的方法,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果对你有用 点赞评论收藏 加关注^_^
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库