前端表单字段展示排序?
假定表单数据 origin
。
const orignal = [
{ dbName: "STATUS", ... },
{ dbName: "NAME", ... },
{ dbName: "DEPART", ... },
...
]
现要将 origin
按如下优先级,针对 dbName
字段进行排序显示
"NAME", "AGE", "LEVEL", "CODE", "DEPART", "NUMBER", "STATUS"
const ruleSort = ["NAME", "AGE", "LEVEL", "CODE", "DEPART", "NUMBER", "STATUS"];
const devCardInfo = origin.sort(({ dbName: dbNameA }, { dbName: dbNameB }) => {
const iA = ruleSort.indexOf(dbNameA.toUpperCase());
const iB = ruleSort.indexOf(dbNameB.toUpperCase());
if (iA === iB) return 0;
if (iA === -1) return 1;
if (iB === -1) return -1;
return iA - iB;
});
有没有更成熟的方案?
不好意思我没有表达清楚,补充一下:ruleSort中提及的字段并不完整,
- 未提及的字段照常显示(无需在意排序)
- 提及的字段也不一定全部存在
- 不会有重复的
dbName
回复
1个回答

test
2024-07-14
这样?
const ruleSort = ["NAME", "AGE", "LEVEL", "CODE", "DEPART", "NUMBER", "STATUS"];
const origin = [
{ dbName: "STATUS", },
{ dbName: "NAME", },
{ dbName: "DEPART",},
{ dbName: "any",},
{ dbName: "NUMBER",},
]
// i+1是因为下面的||运算符,如果使用??可以直接设置为i
const indexes = ruleSort.reduce((res,k,i) => (res[k] = i+1, res),{})
const devCardInfo = origin.sort(({ dbName: n1 }, { dbName: n2 }) => (indexes[n1]||Infinity) - (indexes[n2]||Infinity));
回复

适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容