Furita JavaScript ki aiki
sort()
方法是最强大的数组方法之一。
数组排序
sort()
方法以字母顺序对数组进行排序:
实例
var fruits = ["Banana", "Orange", "Apple", "Mango"]; fruits.sort(); // 对 fruits 中的元素进行排序
反转数组
reverse()
方法反转数组中的元素。
您可以使用它以降序对数组进行排序:
实例
var fruits = ["Banana", "Orange", "Apple", "Mango"]; fruits.sort(); // 对 fruits 中的元素进行排序 fruits.reverse(); // 反转元素顺序
数字排序
默认地,sort()
函数按照字符串顺序对值进行排序。
该函数很适合字符串("Apple" 会排在 "Banana" 之前)。
不过,如果数字按照字符串来排序,则 "25" 大于 "100",因为 "2" 大于 "1"。
正因如此,sort()
方法在对数值排序时会产生不正确的结果。
我们通过一个比值函数来修正此问题:
实例
var points = [40, 100, 1, 5, 25, 10]; points.sort(function(a, b){return a - b});
使用相同的技巧对数组进行降序排序:
实例
var points = [40, 100, 1, 5, 25, 10]; points.sort(function(a, b){return b - a});
比值函数
比较函数的目的是定义另一种排序顺序。
比较函数应该返回一个负,零或正值,这取决于参数:
function(a, b){return a-b}
当 sort()
函数比较两个值时,会将值发送到比较函数,并根据所返回的值(负、零或正值)对这些值进行排序。
实例:
当比较 40 和 100 时,sort()
方法会调用比较函数 function(40,100)。
该函数计算 40-100,然后返回 -60(负值)。
排序函数将把 40 排序为比 100 更低的值。
您可以使用下面的代码片段来测试数值和字母排序:
<button onclick="myFunction1()">以字母顺序排序</button> <button onclick="myFunction2()">以数字顺序排序</button> <p id="demo"></p> <script> var points = [40, 100, 1, 5, 25, 10]; document.getElementById("demo").innerHTML = points; function myFunction1() { points.sort(); document.getElementById("demo").innerHTML = points; } function myFunction2() { points.sort(function(a, b){return a - b}); document.getElementById("demo").innerHTML = points; } </script>
ترتيب الفهرس عشوائي
实例
var points = [40, 100, 1, 5, 25, 10]; points.sort(function(a, b){return 0.5 - Math.random()});
البحث عن أعلى (أو أقل) قيمة في الفهرس
لا يقدم JavaScript أي دالة مدمجة للبحث عن أكبر أو أصغر قيمة في الفهرس.
على الرغم من ذلك، بعد ترتيب الفهرس، يمكنك استخدام المؤشر للحصول على أعلى أو أقل قيمة.
ترتيب تصاعدي:
实例
var points = [40, 100, 1, 5, 25, 10]; points.sort(function(a, b){return a - b}); // الآن يحتوي points[0] على القيمة الأدنى // ويحتوي points[points.length-1] على القيمة الأعلى
ترتيب تنازلي:
实例
var points = [40, 100, 1, 5, 25, 10]; points.sort(function(a, b){return b - a}); // الآن يحتوي points[0] على القيمة الأعلى // ويحتوي points[points.length-1] على القيمة الأدنى
إذا كنت بحاجة فقط إلى العثور على أعلى أو أقل قيمة، فإن فرز الفهرس كامل هو طريقة غير فعالة.
تطبيق Math.max() على الفهرس
يمكنك استخدام Math.max.apply
للعثور على القيمة الأعلى في الفهرس:
实例
function myArrayMax(arr) { return Math.max.apply(null, arr); }
Math.max.apply([1, 2, 3])
يساوي Math.max(1, 2, 3)
.
تطبيق Math.min() على الفهرس
يمكنك استخدام Math.min.apply
للعثور على القيمة الأدنى في الفهرس:
实例
function myArrayMin(arr) { return Math.min.apply(null, arr); }
Math.min.apply([1, 2, 3])
يساوي Math.min(1, 2, 3)
.
طرقتي JavaScript الخاصة لـ Min / Max
أسرع طريقة لحل المشكلة هي استخدام 'الطريقة المكتوبة بشكل يدوي'.
هذا الدالة تمرير عبر الفهرس، وتقارن القيمة الأعلى المكتشفة مع كل قيمة:
شوغاجو (مقتفي الأعلى)
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; }
排序对象数组
JavaScript 数组经常会包含对象:
实例
var cars = [ {type:"Volvo", year:2016}, {type:"Saab", year:2001}, {type:"BMW", year:2010}];
即使对象拥有不同数据类型的属性,sort()
方法仍可用于对数组进行排序。
解决方法是通过比较函数来对比属性值:
实例
cars.sort(function(a, b){return a.year - b.year});
比较字符串属性会稍复杂:
实例
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; });