الطريقة Array.prototype.sort هي لفرز المصفوفة. تأخذ هذه الطريقة معلمة دالة لتحديد قاعدة الفرز.
دعونا نلقي نظرة أولاً على التطبيق البسيط للفرز:
var arr=[2,1,3,4];
تنبيه (arr.sort()) // [1,2,3,4] رتب من الصغير إلى الكبير
// رتب الآن من الأكبر إلى الأصغر لتحصل على [4,3,2,1]
تنبيه (arr.sort(function(left,right){return left>right?-1:1}))
// هنا، تستخدم طريقة الفرز قيمة الإرجاع 1 أو -1 لوظيفة المعلمة لتحديد ما إذا كان سيتم الفرز أم لا بترتيب أو بترتيب عكسي
هل تتذكر ما قلته لك من قبل حول استخدام طريقة Function.apply للحصول على أكبر عنصر في المصفوفة؟
تستخدم المقالة طريقتين مختلفتين للحصول على الحد الأقصى للقيمة في الصفيف.
الآن يمكن أيضًا إظهار الفرز
var arr=[2,1,3,4];
var minValue=arr.sort()[0];
var maxValue=arr.sort()[arr.length-1] // ماذا عن arr.sort().pop()
هذه أيضًا طريقة تنفيذ بديلة ليست هناك حاجة لكتابة اجتياز الحلقة.
ومع ذلك، يجب أن أشير إلى أن هذه الطريقة هي الأقل كفاءة، ولا يزال بإمكانك استخدام هذه التقنية للمصفوفات التي تحتوي على عشرات أو مئات العناصر.
ومع ذلك، إذا كان المصفوفة كبيرة جدًا، فإن استخدام طريقة الفرز () يمكن أن يكون بطيئًا جدًا لدرجة أنك ترغب في إجراء
مزيد من المناقشة حول هياكل البيانات المعقدة للفرز.
1. فرز المصفوفات متعددة الأبعاد
فار آر=[
[2،1،55،4]،
[5،3،22،3]،
[1،2،77،2]،
[9،4،33،5]،
];
تنبيه("تم الترتيب الافتراضي حسب العمود الأولn"+arr.sort().join("n"))
تنبيه("الآن قم بالفرز حسب العمود الثالثn"+arr.sort(function(left,right){return left[2]>right[2]?1:-1}).join("n"))
تنبيه("الآن قم بالفرز بترتيب عكسي حسب العمود الثالثn"+arr.sort(function(left,right){return left[2]>right[2]?-1:1}).join("n ")))
2. فرز هياكل البيانات المعقدة
Array.prototype.each=function(f){for(var i=0;i<this.length;i++) f(this[i],i,this)}
وظيفة showName(item){alert(item.name)}; //اسم الطباعة
var arr=[
{الاسم:"فاتورة"،المال:500}،
{الاسم:"go_rush"،المال:400}،
{الاسم:"دودو"،المال:9000}
];
// اعرض dudu، bill، go_rush بالترتيب. يبدو أن dudu هو الأغنى وأنا الأفقر.
arr.sort(function(left,right){return left.money>right.money?-1:1}).each(showName)
3. فرز الجدول، تحدثت عن هذا الموضوع مع الجميع بالأمس.
أنظر أيضا:
http://www.cnblogs.com/ashun/archive/2006/11/30/appendChild_table_sort.html
فرز جدول أكثر تعقيدًا (أيضًا باستخدام وظيفة الفرز في Array):
http://community.csdn.net/expert/Topicview2.asp?id=5174915
4. هناك امتداد ذكي جدًا للفرز في Protype.js، فلنلقِ نظرة على الكود الخاص به أولاً:
1sortBy: function(iterator) {.
2 إرجاع this.collect(function(value, Index) {
3 إرجاع {القيمة: القيمة، المعايير: التكرار (القيمة، الفهرس)}؛
4 }).sort(function(left, right) {
5 var a = left.criteria, b = right.criteria;
6 إرجاع أ < ب -1 : أ > ب 1 : 0 ؛
7 }).pluck('value');
8}،
يسمح لك هذا SortBy بتمرير دالة، وتنفيذ الدالة مع كل عنصر من عناصر المصفوفة كمعلمة، وأخيرًا فرز النتائج التي ترجعها الدالة.
اسمحوا لي أن أقوم بتفصيل وظيفته أدناه.
طريقة التجميع هي في الواقع طريقة الخريطة وهي تعادل
Array.prototype.map=function(f){
for(var i=0;ret=[];i<this.length;i++) ret[i]=f(this[i],i,this)
عودة متقاعد
}
على سبيل المثال، الآن
آر=[2,1,4,3]
iterator=function(x){return x*x}
يمكنك الحصول على مثل هذه المصفوفة في 1-3 أسطر من التعليمات البرمجية
[
{القيمة:2،المعايير:4}،
{القيمة:1،المعايير:1}،
{القيمة:4،المعايير:16}،
{القيمة:3،المعايير:9}
]
4-6 أسطر من التعليمات البرمجية تفرز المصفوفة وفقًا للمعايير: من الصغير إلى الكبير، بعد الفرز، نحصل على
[
{القيمة:1،المعايير:1}،
{القيمة:2،المعايير:4}،
{القيمة:3،المعايير:9}،
{القيمة:4،المعايير:16}
]
السطر 7 من الكود هو الأبسط، فهو يأخذ سمة القيمة لكل عنصر ويحصل في النهاية على [1,2,3,4] لتنفيذ الأمرsortBy(function...) للفرز arr.
ربما تكون قدرتي على التعبير اللغوي محدودة. عندما أتحدث عن SortBy في Prototype.js، لا أعرف كيفية التعبير عنه بالكلمات.
أنا آسف حقًا لأنه يتعين على الجميع العمل بجد لقراءة رمز الشرح الذي كتبته
http://www.cnblogs.com/ashun/archive/2006/12/01/sort_sortby_array_prototype.html
!