美文网首页
JavaScript学习--数组排序以及最大值、最小值问题

JavaScript学习--数组排序以及最大值、最小值问题

作者: 我在Bug的尽头等你 | 来源:发表于2019-11-26 11:08 被阅读0次

1.数字排序
在js中默认是使用 sort() 函数按照字符串顺序对值进行排序。
但是,sort() 方法在对数值排序时会产生不正确的结果。
我们可以比值函数来修正此问题;先讲讲比值函数的概念:
比值函数的目的是定义另一种排序顺序。
比值函数应该返回一个负,零或正值,这取决于参数:

function(a, b){return a-b}

当 sort() 函数比较两个值时,会将值发送到比值函数,并根据所返回的值(负、零或正值)对这些值进行排序。

举个栗子:
当比较 40 和 100 时,sort() 方法会调用比较函数 function(40,100)。

该函数计算 40-100,然后返回 -60(负值)。

排序函数将把 40 排序为比 100 更低的值。

接下来,我们再看看在sort中使用比值函数(升序排序):

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b});

最终得到的结果就是:1,5,10,25,40,100
最大值,最小值也就一目了然了:

现在 points[0] 包含最低值
而 points[points.length-1] 包含最高值
下面的降序同理。

再看看降序排序:

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return b - a}); 

只需要把 a - b 换成 b - a 即可。

另外:找最大值,最小值,也可以使用Math的Api:

function myArrayMax(arr) {
    return Math.max.apply(null, arr);
}
function myArrayMin(arr) {
    return Math.min.apply(null, arr);
}

代码很简单就不多说了;
也可以自己写个JavaScript方法来处理:

最大值:

function myArrayMax(arr) {
    var len = arr.length
    var max = -Infinity;
    while (len--) {
        if (arr[len] > max) {
            max = arr[len];
        }
    }
    return max;
}

最小值:

function myArrayMin(arr) {
    var len = arr.length
    var min = Infinity;
    while (len--) {
        if (arr[len] < min) {
            min = arr[len];
        }
    }
    return min;
}

最后,附一些比较实用的处理排序对象的方法,如果有需要可以直接拿来使用:

var persons= [
{type:"Tom", age:25},
{type:"John", age:19},
{type:"Lucy", age:36}];
persons.sort(function(a, b){return a.age- b.age});

结果就不给出来了,感兴趣的可以自己撸一遍;

如果是需要比较字符串属性的话,可以使用下面的方法来处理:

persons.sort(function(a, b){
      var x = a.type.toLowerCase();
      var y = b.type.toLowerCase();
      if (x < y) {return -1;}
      if (x > y) {return 1;}
      return 0;
});

相关文章

  • JavaScript学习--数组排序以及最大值、最小值问题

    1.数字排序在js中默认是使用 sort() 函数按照字符串顺序对值进行排序。但是,sort() 方法在对数值排序...

  • js笔记四十获取数组中的最大值和最小值(四种方法)

    获取数组中最大值和最小值 给数组进行排序(小->大), 第一个和最后一个就是最小值和最大值 使用Math中的max...

  • jsday02

    数组 数组求最大值 数组求最小值 数组拼接成字符串 反转数组 冒泡排序 阻止链接跳转 数组的一些方法

  • 二、基本算法

    一、选择排序 核心思想: 以数组为例:取出数组的最大值(最小值),然后将最大值与数组的第一位进行交换。 讲解:第一...

  • 计数排序

    排序简介 找出数组的最大值和最小值,创建新数组[max+1], 原数组值等于新数组下标时, 新数组值加一,最后把新...

  • ios 数组排序一些基础方法

    数组翻转 数组升序 数组降序 获取数组对象和,平均数,最大值,最小值 冒泡排序 原理:比较两个相邻的元素,将值大的...

  • 数组中获取最大值or最小值的问题

    数组中获取最大值or最小值的问题 1.排序法 2.使用Math中 max / min 方法实现 3.字符串拼接后调...

  • leetcode 题解

    1. 关于旋转数组 旋转数组求最小值,最大值,以及任意值:https://leetcode.windliang.c...

  • 4.2~1数组应用

    了解一维数组的定义与使用之后,读者可 以使用数组解决很多问题:比如对一堆杂乱的数据快速取出最大值、最小值或进行排序...

  • C语言:十种排序(一) - 冒泡排序

    前言 一种将无序数组进行排序的方法。 冒泡排序,主要思想:每次循环找到一个最大值或最小值放到数组最右边(通过左右元...

网友评论

      本文标题:JavaScript学习--数组排序以及最大值、最小值问题

      本文链接:https://www.haomeiwen.com/subject/bmlewctx.html