亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

javascript - 關于比較函數的問題

瀏覽:71日期:2023-02-13 11:21:37

問題描述

function createComparisonFunction(propertyName) { return function(object1,object2) {var value1 = object1[propertyName];var value2 = object2[propertyName]; if(value1 < value2) { return -1;} else if(value1 > value2) { return 1;} else { return 0;} }};這是紅寶書中一個知識點,這段代碼不是太明白

問題解答

回答1:

這是為了比較特定數據結構而制造的工具函數。例如數據結構格式為:

let arr = [{ name: ’foo’, value: 123 }, { name: ’bar’, value: 456 }]

這時,一般的 sort 方法需要這么編寫,形如:

arr.sort(function (a, b) { return a.value - b.value > 0 ? 1 : -1 })

這段代碼存在的問題:

硬編碼了 value 參數,排序其它字段時必須重新編碼。

返回 1 / -1 的邏輯是冗余而無聊的。

直接編寫排序的匿名函數,在紅寶書的年代可讀性不夠好(現在有箭頭函數,其實問題不大)。

所以對上面的 case,紅寶書作者設計了一個通用的工具函數,以生成一個【用于排序特定字段】的函數。注意你調用這個工具函數,返回的是一個新函數,而不是排序的結果(所謂高階函數)。

應用這個封裝后,代碼形如:

// 創造一個【根據 value 字段來排序】的函數let compareFn = createComparisonFunction(’value’)// 將創造的函數傳入 sort 中作為排序依據arr.sort(compareFn)

這就起到了簡化業務邏輯的作用。

回答2:

什么不明白, 就是比較兩個對象某個屬性的大小createComparisonFunction('test')({’test’: 1}, {'test': 2})返回的是-1

回答3:

調用函數時,分為兩步來看。首先通過createComparisonFunction()傳入比較的字段。在createComparisonFunction()函數內,返回一個匿名函數。同時由于匿名函數處在createComparisonFunction()內,所以你對createComparisonFunction()傳入的參數propertyName對匿名函數也有效存在。通過上一步,你已經得到的匿名函數包含propertyName,此時你就可以傳入你要比較的兩個對象,在函數內比較他們的propertyName屬性,返回比較結果。

回答4:

這個就叫高階函數。

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 国产精品视频网 | 欧美精品亚洲二区 | 亚洲免费黄色网 | 国产成人午夜性视频影院 | 欧美特级限制片高清 | www黄色大片| 欧美一级α片毛片免费观看 | 久久久久琪琪免费影院 | 午夜丁香婷婷 | 成人免费视频在线播放 | 中文字幕日韩欧美一区二区三区 | 亚洲网红精品大秀在线观看 | 国产精品一区在线观看 | 日本成熟老妇乱 | 国产精品国产精品国产三级普 | 91国内外精品自在线播放 | 日韩一卡2卡3卡四区别 | 未满十八18周岁禁止免费国产 | 国内真实下药迷j在线观看 国内主播大秀福利视频在线看 | 黄色一级影视 | 丁香婷婷开心激情深爱五月 | 亚洲在线免费观看视频 | 亚洲欧洲在线视频 | 国产免费播放一区二区三区 | 黄色激情网址 | 免费黄色在线网站 | 午夜啪啪网 | 日本a级毛片 | 国产精品三级国语在线看 | 黄网站色视频免费看无下截 | 亚洲精品一区二区手机在线 | 国产精品欧美一区二区三区 | 国产乱理伦片a级在线观看 国产乱理伦片在线观看 | 亚洲国产精品日韩一线满 | 91亚洲精品福利在线播放 | 在线观看高清免费 | 欧美亚洲视频在线观看 | 韩国xxxxxxxx69 | 国产手机在线小视频免费观看 | 性色生活免费看性大片 | 亚洲黄毛片 |