js求数组的最大值--奇技淫巧和笨方法

更新日期: 2018-08-27阅读: 2.3k标签: js技巧

写这篇文章的原因
我目前做的项目很少用到算法,于是这方面的东西自然就有点儿生疏。最近的一次编码中遇到了从数组中获取最大值的需求,当时我不自觉的想到了js的sort()函数,现在想来真是有些“罪过”,当时自己内心还觉得有些得意:“嗯,我用js的内置方法解决了一个通常需要用排序算法才能解决的问题,代码简短,不用去写头疼的遍历和比较,可读性还好。。。”。内心戏很重,对吧。咳咳,哎,自己还是嫩而且还懒。js内生的sort函数也是用到了排序,详见segmentfault上的这个js内生sort()函数是如何实现的


奇技淫巧
js中有很多“奇技淫巧”,有时我会常常刻意去用这些“奇技淫巧”(注意,我不是在反对用它,只是有时其实没必要用)。比如,求数组中的最大值,js中Array没有原生的求最大值的方法,但是Math有呀:

Math.max(22, 79, 33) // 79


如果数组想用也是可以用的呀:

var arr = [22, 79, 33];
Math.max.apply(null, arr); // 79


或者不用apply方法,你把数组转换成字符串,用eval()方法来执行拼接为“Math.max(num1, num2, num3)”的js代码也是可以的:

var max = eval("Math.max(" + arr.join(',') + ")"); // 79


如果这个你没想到,你就用我上面提到的sort()函数也是可以的呀:

var arr = [22, 79, 33];

var getMax = function(arr) {
    var copyArr = JSON.parse(JSON.stringify(arr));
    var len = copyArr.length;
    copyArr.sort();
    return copyArr[len - 1];
};

getMax(arr); // 79


笨方法
看到现在,你一定惊叹js的强大,但有时过于依赖它的这种“奇技淫巧”会让自己处于一种“自大”的状态,毕竟js的强大不代表你自己的编码水平强大。所以返璞归真吧,用笨方法来锻炼下自己的脑力:

var arr = [22, 79, 33];
var getMax = function(arr) {
   var len = arr.length,
       max = arr[0];

   while (len--) {
       if (max >= arr[len]) {
           continue;
       }

       max = arr[len];
   }

   return max;
};
getMax(arr); // 79


注意:这篇文章最初发表在我自己折腾的博客站点上:js求数组的最大值--奇技淫巧和笨方法,该博客用了一位前辈开源的源码,基于thinkjs和vuejs开发,欢迎大家来逛逛。


来源:https://www.yanghongdong.cn/algo/js-get-maxmium-from-array.html


链接: https://www.fly63.com/article/detial/1033

通过原生js判断网页图片是否已加载成功的方法总汇

在写网页的程序的时候,经常碰到要在网页加载完全之后再去展现页面,加载中的时候通过显示loading...的样式。这时候我们会直接想到使用window.onload的方式,或者是img对象的complete属性

JavaScript 异步调用——从小小题目逐步走进 JavaScript 异步调用

async/await 语法让异步调用写起来像写同步代码,在编写代码的时候,可以避免逻辑跳跃,写起来会更轻松。

UglifyJS3的使用,UglifyJS3中文文档

使用UglifyJS合并/压缩JavaScript ,UglifyJS3与UglifyJS2相比API变动较大,简化较多,文档也增加了不少示例。

不用if撸代码,是件很有趣的事。

试着不用if撸代码,是件很有趣的事,而且,万一你领会了什么是“数据即代码,代码即数据”呢?

带你理解 JS 容易出错的坑和细节

本文重在列出并解释说明 JS 中各种容易出错的坑和细节,供大家更加深入理解为什么 JS 会这样

一行能装逼的JavaScript代码

一行能装逼的JavaScript代码,其实靠的是js的类型转化的一些基本原理,本篇就来揭密”sb”是如何炼成的。相信你如果能把这个理清楚了,以后遇到类型转化之类的题目,就可以瞬间秒杀了。

JavaScript:处理值为undefined的7个技巧

学习JavaScript时,当时我对于undefined 和 null 比较困惑 ,因为他们都表示空值。他们有什么明确的区别吗?他们似乎都可以定义一个空值,而且 当你进行 在做null ===undefined 的比较时,结果是true。

js中一些怪异的写法_神奇的JavaScript

JavaScript是一门伟大的语言,作为一门弱类型语言,它拥有非常简洁的语法,庞大的生态系统,灵活性非常强大。js各种神奇的写法,所谓的神奇也就是罕见。下面就开始介绍这些怪异的写法吧。

js方式实现手机号码隐藏中间4位

在前端开发中,遇到如下需求:隐藏手机号码,将中间几位替换为*。通过js如何实现手机号码隐藏中间4位呢?下面整理几种实现方式:使用正则、通过长度截取。

js实现浏览器:加入收藏、设为首页、保存到桌面的方法功能

在一些网页中我们可以常见的“设置为首页”和“ 收藏本站”,以及“保存到桌面”等功能,使用js是如何实现的呢?这里为大家分享下实现方法,完美兼容IE,chrome,ff等浏览器

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!