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)
后一個版本還允許您訪問深度嵌套的屬性。

TA貢獻1852條經驗 獲得超7個贊
您可以像這樣傳遞道具名稱:
export const sortSelectOptions = (options, sortByKey = 'name', type, prop) => {
//...
return options.slice().sort((a, b) => (a[prop] > b[prop] ? 1 : -1));
//...
}
添加回答
舉報