亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

將 props 直接傳遞給實用函數

將 props 直接傳遞給實用函數

蠱毒傳說 2023-07-20 16:26:39
我有以下常用的排序功能,export const sortSelectOptions = (options, sortByKey = 'name', type) => {  switch (type) {    case 'alphaNumeric':      return options        .slice()        .sort((a, b) =>          Math.sign(            parseInt(a.name.replace(/["]$/, ''), 10) -            parseInt(b.name.replace(/["]$/, ''), 10)          )        );    case 'numeric':      return options.slice().sort((a, b) => (a.nominalSize > b.nominalSize ? 1 : -1));    default:      return sortBy(options, sortByKey)  }}我正在調用上面的函數,如下所示,options => sortSelectOptions(options, null, 'numeric')對于數字類型,我基于排序nominalSize,現在我想直接從這里傳遞這個字段sortSelectOptions(options, null, 'numeric')作為道具。選項是對象數組,其中一個屬性是nominalSize。我正在尋找一種通用的排序功能。任何人都可以讓我知道如何將精確字段作為道具傳遞給通用函數以實現排序功能。提前謝謝了
查看完整描述

2 回答

?
藍山帝景

TA貢獻1843條經驗 獲得超7個贊

如果我理解正確的話,您希望訪問值的邏輯在排序函數之外進行排序?


您可以通過名稱訪問屬性,如下所示:


export const sortSelectOptions = (options, sortByKey = 'name', type, fieldName) => {

  switch (type) {

    case 'alphaNumeric':

      return options

        .slice()

        .sort((a, b) =>

          Math.sign(

            parseInt(a.name.replace(/["]$/, ''), 10) -

            parseInt(b.name.replace(/["]$/, ''), 10)

          )

        );

    case 'numeric':

      return options.slice().sort((a, b) => (a[fieldName] > b[fieldName] ? 1 : -1));

    default:

      return sortBy(options, sortByKey)

  }

}

并用以下方式調用它:


options => sortSelectOptions(options, null, 'numeric', 'nominalSize')

或者您可以概括此模式并請求訪問器函數,如下所示:


export const sortSelectOptions = (options, sortByKey = 'name', type, accessor) => {

  switch (type) {

    case 'alphaNumeric':

      return options

        .slice()

        .sort((a, b) =>

          Math.sign(

            parseInt(accessor(a).replace(/["]$/, ''), 10) -

            parseInt(accessor(b).replace(/["]$/, ''), 10)

          )

        );

    case 'numeric':

      return options.slice().sort((a, b) => (accessor(a) > accessor(b) ? 1 : -1));

    default:

      return sortBy(options, sortByKey)

  }

}

并用以下方式調用它:


options => sortSelectOptions(options, null, 'numeric', x => x.nominalSize)

options => sortSelectOptions(options, null, 'alphaNumeric', x => x.name)

后一個版本還允許您訪問深度嵌套的屬性。


查看完整回答
反對 回復 2023-07-20
?
慕姐4208626

TA貢獻1852條經驗 獲得超7個贊

您可以像這樣傳遞道具名稱:


export const sortSelectOptions = (options, sortByKey = 'name', type, prop) => {

    //...

    return options.slice().sort((a, b) => (a[prop] > b[prop] ? 1 : -1));

    //...

}


查看完整回答
反對 回復 2023-07-20
  • 2 回答
  • 0 關注
  • 171 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號