摘要:關于數組的使用方法網上一大堆,這我也不多費口舌,這里,我主要講講自個兒怎么去理解這個方法去進行升序和降序的。有理解不對的,希望大家提出來以便我改正。感覺自己多理解理解就能理解了。
關于數組sort()的使用方法網上一大堆,這我也不多費口舌,這里,我主要講講自個兒怎么去理解這個sort()方法去進行升序和降序的。有理解不對的,希望大家提出來以便我改正。
首先,要理解sort()其實是利用遞歸進行冒泡排序的
其次,sort()方法接收的是一個比較函數compare(x,y),接收兩個參數,主要是根據參數的比較來判斷返回值的
最后,記住這樣一句話就好理解下面的代碼了。凡是return 1的時候就交換位置
直接看代碼吧。
1.升序排序
var arr = new Array(1,5,2,4); function ascCompare(x,y) { if(x > y) { return 1; } else if(x === y) { return 0; } else { return -1; } } var newArr = arr.sort(ascCompare); console.log(arr);//會改變原來的數組[1,2,4,5] console.log(newArr);//[1,2,4,5]
理解:
第一輪:[1,5,2,4]
①x=1,y=5,x
③x=5,y=4,x>y,return 1,交換位置--[1,2,4,5];
第二輪:(從第二個元素開始)
①x=2,y=4,x
①x=4,y=5,x
2.降序排序(同理)
var arr = new Array(1,5,2,4); function descCompare(x,y) { if(x < y) { return 1; } else if(x === y) { return 0; } else { return -1; } } var newArr = arr.sort(descCompare); console.log(arr);//會改變原來的數組[5,4,2,1] console.log(newArr);//[5,4,2,1]
理解:
第一輪:[1,5,2,4]
①x=1,y=5,x
①x=2,y=4,x
第三輪:(從第三個元素開始)
①x=2,y=1,x>y,return -1,不交換位置--[5,4,2,1];
最后完成了排序。
最后將這兩個方法改成更簡單的,只要記住x-y的結果為正數就交換位置就很好理解
3.升序排序(2)
var arr = new Array(1,5,2,4); function ascCompare2(x,y) { return x - y; } var newArr = arr.sort(ascCompare2); console.log(arr);//[1,2,4,5] console.log(newArr);//[1,2,4,5]
理解:跟上面的升序原理理解一樣,只不過這里只要理解成x-y的結果為正數就交換位置即可。
第一輪:[1,5,2,4]
①x=1,y=5,x-y<0,不交換位置--[1,5,2,4];
②x=5,y=2,x-y>0,交換位置--[1,2,5,4];
③x=5,y=4,x-y>0,交換位置--[1,2,4,5];
第二輪:(從第二個元素開始)
①x=2,y=4,x-y<0,不交換位置--[1,2,4,5];
②x=4,y=5,x-y<0,不交換位置--[1,2,4,5];
第三輪:(從第三個元素開始)
①x=4,y=5,x-y<0,不交換位置--[1,2,4,5];
最后完成了排序。
4.降序排序(2)
var arr = new Array(1,5,2,4); function descCompare2(x,y) { return y - x; } var newArr = arr.sort(descCompare2); console.log(arr);//[5,4,2,1] console.log(newArr);//[5,4,2,1]
理解:跟上面的降序原理理解一樣,只不過這里只要理解成y-x的結果為正數就交換位置即可。
第一輪:[1,5,2,4]
①x=1,y=5,y-x>0,交換位置--[5,1,2,4];
②x=1,y=2,y-x>0,交換位置--[5,2,1,4];
③x=1,y=4,y-x>0,交換位置--[5,2,4,1];
第二輪:(從第二個元素開始)
①x=2,y=4,y-x>0,交換位置--[5,4,2,1];
②x=2,y=1,y-x<0,不交換位置--[5,4,2,1];
第三輪:(從第三個元素開始)
①x=2,y=1,y-x<0,不交換位置--[5,4,2,1];
最后完成了排序。
感覺自己多理解理解就能理解了。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/91715.html
摘要:要實現這一點,首先應把數組的元素都轉換成字符串如有必要,以便進行比較。比較函數應該具有兩個參數和,其返回值如下若小于,在排序后的數組中應該出現在之前,則返回一個小于的值。 sort()排序的原理 最近在leetcode刷題的時候遇到一個排序問題之前一直都忽略了sort排序的原理,讓我們看下w3c對于sort()的說明:如果調用該方法時沒有使用參數,將按字母順序對數組中的元素進行排序,說...
摘要:寫在前面專題系列是我寫的第二個系列,第一個系列是深入系列。專題系列自月日發布第一篇文章,到月日發布最后一篇,感謝各位朋友的收藏點贊,鼓勵指正。 寫在前面 JavaScript 專題系列是我寫的第二個系列,第一個系列是 JavaScript 深入系列。 JavaScript 專題系列共計 20 篇,主要研究日常開發中一些功能點的實現,比如防抖、節流、去重、類型判斷、拷貝、最值、扁平、柯里...
摘要:中基礎數據類型數據類型名稱數據類型說明只有一個值,即,聲明變量的初始值。只有一個值,即,表示空指針,的值是派生的值。由零或多個位字符組成只有兩個值,即和該類型使用來表示整數和浮點數。中的對象其實就是一組數據和功能的集合。 JavaScript 中基礎數據類型 數據類型名稱 數據類型說明 Undefined 只有一個值,即 undefined ,聲明變量的初始值。 Nul...
摘要:目錄導語對象對象小結導語本系列文章將重點講解提供的原生庫標準庫,只要在支持語言的平臺,標準庫中的提供的對象的屬性和方法都能使用對象對象的理解講的標準庫,首先要從對象談起,因為之后的所有對象都可以看做是對象構造出來的因此,對象可以看做是一個構 目錄 導語 1. Object對象 2. Array對象 3. 小結 導語 本系列文章將重點講解JavaScript提供的原生庫——標準庫,只要...
摘要:方法可以接受一個可選的參數,比較回調函數。方法會修改原本數組輸出如上,在調用方法后,自身數組被修改。對于長數組會使用快速排序,而快速排序一般是不穩定的。所以方法返回的數組永遠是該方法認為的升序數組。 前幾天在某公司面試的時候被問到關于這個方法的默認值的問題(然而面試官跟我說的其實是錯的,當場我還不夠底氣去反駁)。突然發現對這個方法的了解還不夠,因此回來查了資料,看了v8引擎的實現和EC...
閱讀 3454·2021-11-22 12:00
閱讀 672·2019-08-29 13:24
閱讀 2905·2019-08-29 11:31
閱讀 2587·2019-08-26 14:00
閱讀 3185·2019-08-26 11:42
閱讀 2477·2019-08-23 18:31
閱讀 799·2019-08-23 18:27
閱讀 2844·2019-08-23 16:58