JS学习——数组排序

学习内容来源:JavaScript 数组排序

JavaScript 数组排序

数组排序

sort() 方法以字母顺序对数组进行排序.

注意:在原数组上进行排序

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();     // 返回 ['Apple', 'Banana', 'Mango', 'Orange']

反转数组

reverse() 方法反转数组中的元素。

注意:在原数组上进行反转

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.reverse();   // 返回 ['Mango', 'Apple', 'Orange', 'Banana']

数字排序

默认地,sort() 函数按照字符串顺序对值进行排序。可以向 sort() 方法传入一个比值函数来进行数字排序。

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

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

随机排序

sort() 方法传入一个可以返回值为(负、零或正值)的比值函数来进行随机排序

// Math.random()返回介于 0(包含) ~ 1(不包含) 之间的一个随机数:
var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return 0.5 - Math.random()}); 

查找最高(或最低)的数组值

JavaScript 不提供查找数组中最大或最小数组值的内建函数。

通过数组排序后,可以通过索引值获取数组最高或最低值。但是,仅仅需要找到最高或最低值,对整个数组进行排序是效率极低的方法。

1、对数组使用 Math.max() 和 Math.min()

JavaScript apply() 方法允许传入一个数组作为参数。

// 传入一个 arr 数组,返回 arr 数组的最大值
function myArrayMax(arr) {
    return Math.max.apply(null, arr);
}
// 传入一个 arr 数组,返回 arr 数组的最小值
function myArrayMin(arr) {
    return Math.min.apply(null, arr);
}

2、自定义

// 此函数遍历数组,用找到的最高值与每个值进行比较
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;
}

排序对象数组

即使对象拥有不同数据类型的属性,sort() 方法仍可用于对数组进行排序。解决方法是通过比较函数来对比属性值。

例子:

var cars = [
  { type: "Volvo", year: 2016 },
  { type: "Saab", year: 2001 },
  { type: "BMW", year: 2010 }
];

// 按照对象的 year 属性值的大小来升序排序(数字排序)
cars.sort(function(a, b){return a.year - b.year});
// 结果如下:
[
    {
        "type": "Saab",
        "year": 2001
    },
    {
        "type": "BMW",
        "year": 2010
    },
    {
        "type": "Volvo",
        "year": 2016
    }
]

// 按照对象的 type 属性值的大小来升序排序(字符串排序)
cars.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;
});
// 结果如下:
[
    {
        "type": "BMW",
        "year": 2010
    },
    {
        "type": "Saab",
        "year": 2001
    },
    {
        "type": "Volvo",
        "year": 2016
    }
]
上一篇:快速排序(QuickSort)


下一篇:二分查找(BinarySort)