第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

js用sort()排序,用的比較函數(shù)出現(xiàn)兩個參數(shù)情況下怎么排序?

js用sort()排序,用的比較函數(shù)出現(xiàn)兩個參數(shù)情況下怎么排序?

UYOU 2018-08-30 10:19:07
1.首先是要排序的數(shù)組var employees=[]     employees[0]={name:"George", age:32, retiredate:"March 12, 2014"}     employees[1]={name:"Edward", age:17, retiredate:"June 2, 2023"}     employees[2]={name:"Christine", age:58, retiredate:"December 20, 2036"}     employees[3]={name:"Sarah", age:62, retiredate:"April 30, 2020"}2.第一種情況下是比較函數(shù)根據(jù)一個參數(shù)進行比較,然后排序;3.第二種情況下是根據(jù)多個鍵值進行比較。如果第一個參數(shù)“age”相同,則比較第二個參數(shù)“name”。var by = function(name,minor){ return function(o,p){   var a,b;   if(o && p && typeof o === 'object' && typeof p ==='object'){      a = o[name];      b = p[name];     if(a === b){       return typeof minor === 'function' ? minor(o,p):0;      }     if(typeof a === typeof b){       return a < b ? -1:1;      }     return typeof a < typeof b ? -1 : 1;    }else{      thro("error");    }  } } employees.sort(by('age',by('name')));**問題來了:①上面的參數(shù)是在by()裏面調(diào)用了by()方法,但是裏面的by()方法卻只傳了一個參數(shù)'name',可以調(diào)用嗎?②在比較函數(shù)中,判斷a===b時利用typeof判斷minor參數(shù)是不是函數(shù),如果是則執(zhí)行minor(),也就是調(diào)用by('name'),但是參數(shù)不對應(yīng),而且minor(o,p)是哪里定義的?具體是怎么執(zhí)行的?**
查看完整描述

1 回答

?
動漫人物

TA貢獻1815條經(jīng)驗 獲得超10個贊

①上面的參數(shù)是在by()裏面調(diào)用了by()方法,但是裏面的by()方法卻只傳了一個參數(shù)'name',可以調(diào)用嗎?

javascript里函數(shù)參數(shù)是不固定的,如果函數(shù)聲明中的形參被沒有對應(yīng)的實參,則這個形參的值就是“undefined”。

舉個栗子:

function test(a, b) {  console.log(a);  console.log(b);
}

test(1);/* 
 * Result:
 * 1
 * undefined
 */

So,只傳一個參數(shù)“name”是可以的,且在后面的判斷里面會得到處理:

return typeof minor === 'function' ? minor(o,p):0; 
//此時的minor參數(shù)沒傳入的話,其值是“undefined”,所以該行代碼會返回0,否則會執(zhí)行minor(o, p)

②在比較函數(shù)中,判斷a===b時利用typeof判斷minor參數(shù)是不是函數(shù),如果是則執(zhí)行minor(),也就是調(diào)用by('name'),但是參數(shù)不對應(yīng),而且minor(o,p)是哪里定義的?具體是怎么執(zhí)行的?**

這了要理解的是:

// by函數(shù)定義是一個包含兩個參數(shù)的函數(shù),上面解釋過minor參數(shù)不帶也是可以的var by = function(name,minor){……)

需要特別注意的是,這個函數(shù)的又返回了一個函數(shù):

return function(o,p){……}

那么接下來要看關(guān)鍵的這句了:

employees.sort(by('age',by('name')));

這里傳入的比較函數(shù)是: by('age',by('name'))

函數(shù)入?yún)⒌臅r候的實際調(diào)用過程為:

// Array.prototype.sort([compareFunction]), compareFunction是可選參數(shù)employees.sort(by('age',by('name')));  
->employees.sort(compareFunction=by('age',by('name')));  ->// 下面這個賦值語句使得compareFunction變成return function(o, p) 
{……}compareFunction=by('age',by('name'));  ->// 同理,進一步看by函數(shù)的入?yún)⑦^程by('age',by('name'))  ->
// 當(dāng)?shù)诙?shù)by('name')執(zhí)行完之后,minor實際也是return function(o, p) {……}by(name='age', minor=by('name') ->
// 假設(shè)第二個實參入?yún)⒌臅r候返回一個匿名函數(shù)lambda, 則by('age', lambda);
……

到此應(yīng)該兩個問題都應(yīng)該明白了吧,如果有不清楚的地方,歡迎繼續(xù)追問…


查看完整回答
反對 回復(fù) 2018-10-18
  • 1 回答
  • 0 關(guān)注
  • 1902 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號