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));
//...
}
添加回答
举报