javascript - 将 props 直接传递给实用程序函数
问题描述
我有以下常用的排序功能,
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
. 我正在寻找一种通用的排序功能。
任何人都可以让我知道如何将精确字段作为道具传递给通用函数以实现排序功能。
提前谢谢了
解决方案
如果我理解正确,您希望访问值的逻辑在排序函数之外进行排序?
您可以通过其名称访问属性,如下所示:
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)
后一个版本还允许您访问深度嵌套的属性。
推荐阅读
- sql - 通过行聚合和新列创建转换表
- jsp - HTTP 状态 500 - 处理 JSP 页面时发生异常 //在获取值时
- php - 函数返回后在php中重置全局变量
- python - postgresql 更新功能耗时太长
- android - 如何在片段上绘制加密货币的指数移动平均数据?
- sql - 如何旋转然后计算数据?
- android - 如何解决 rxjava 异常?以下是来自 firebase crashanalytics 的日志
- firebase - 检测应用程序被杀死并清理 Firestore。Flutter 制作的语音聊天应用
- node.js - 清除node js应用中的mobx store-redis信息
- android - Android registerForActivityResult 拍照不会返回全尺寸照片