软件设计 2017-05-21
求数组的最小值和最大值
//求数组当中最大值和最小值 var arr=[3,2,6,1,45,23,456,23,2,6,3,45,37,89,30]; //第一种方法 根据排序方法来求最大值和最小值 从小到大排序 第0位就是最小值 最后一位就是最大值 arr.sort(function(a,b){ return a-b; //按从小大的情况排序 //return b-a; 按从大到小的情况排序 }) console.log(arr); var min=arr[0]; var max=arr[arr.length-1]; console.log(min,max);// 1,456 var arr=[3,2,6,1,45,23,456,23,2,6,3,45,37,89,30]; //第二种方法 根据每个数组元素进行比较 假设第一个最大或最小 然后跟后面的元素进行比较 var min=arr[0]; var max=arr[0]; for(var i=0;i<arr.length;i++){ arr[i]<min?min=arr[i]:min; arr[i]>max?max=arr[i]:max; } console.log(min,max); // 1,456 //第三种方法 根据Math.max,Math.min以及apply传参 var min=Math.min.apply(window,arr); var max=Math.max.apply(window,arr); console.log(min,max); //第四种方法 根据Math.max,Math.min和evel //eval('string') 转换字符串成表达式 var min=eval('Math.min('+arr.toString()+')'); var max=eval('Math.max('+arr.toString()+')'); console.log(min,max);
写一个函数,功能就是求参数中的平均数,里面涉及到arguments这个类数组 并且把这个类数组转换成数组 然后利用数组的方法进行求平均数
//求一组数的平均数,去掉最小数和最大数 求数组的平均数 //利用数组原型链上的slice克隆数组功能及call改变this,以及sort进行排序去掉最大值及最小值 function avgFn(){ var arr=Array.prototype.slice.call(arguments); //借用slice克隆的功能把arguments这个类数组转换成数组 arr.sort(function(a,b){ return a-b; }) arr.shift(); //去除数组的首位 arr.pop(); //去除数组的尾位 return (eval(arr.join('+'))/arr.length).toFixed(2); } console.log(avgFn(8.0,3.0,5.0,4.0,5.5,6.5,8,4.0,5.5));
再写一种方法 更加对call的用法的理解 以及对类数组转换成数组的理解
function avgFn(){ Array.prototype.sort.call(arguments,function(a,b){ return a-b; }); Array.prototype.shift.call(arguments); Array.prototype.pop.call(arguments); return (eval(Array.prototype.join.call(arguments,'+'))/arguments.length).toFixed(2); } console.log(avgFn(8.0,3.0,5.0,4.0,5.5,6.5,8,4.0,5.5));
再写点注意的事情:在IE6至IE8中 对 arguments 这个类数组转换成数组是兼容的 但对元素集合以及节点集合这样的类数组存在不兼容 那么怎么办呢 老老实实用for循环吧 那么怎么去兼容页面吗?可以 用 try{} catch(e){} 这个来判断是非兼容。
再细讲一下sort方法吧
var arr=[2,3,45,6,45,67,56,6,56,789,55,45,43,45]; //arr.sort(); 这个方法只对10以内的数字才会有效 比如说 它会认为8>76 arr.sort(function(a,b){ return a-b; //意思就是从小排到大 用另外一种意思理解 就是 return 大于0的 就是从小排到大 ,小于0 就是大排到小 //如果想打乱一个数组 那么return Math.random()-0.5 就OK了。 }) //ok,都是一些数字的排序 有啥意思 如果是中文字符串呢 那么怎么排序呢 //那就放神器了 localeCompare() 这个就是可以把中文字符串转换成拼音字符串然后进行比较 前面字符串小于括号中的字符串那就是返回1 还是看代码吧 arr=['徐文童鞋','博客园童鞋','张三','李四']; arr.sort(function(a,b){ return a.localeCompare(b); }) console.log(arr);//(4) ["博客园童鞋", "张三", "徐文童鞋", "李四"]