javascript - 为什么我的函数不能正确排序对象属性?
问题描述
我正在制作一个带有可排序列的反应表。当我对年龄行进行排序时,结果排序不正确。我回去检查以确保我正确排序并在数据中添加了一些重复数字。我还检查了数据中的空白或错误。我还尝试确保它们是数字而不是字符串。任何“年龄”属性似乎都没有任何问题。那么为什么排序认为 25 高于 32?
这是代码(我删除了重复的其他属性,由...注释,除了扩展运算符,这当然是扩展运算符):
function PeopleList({participants}){
const [reverse, setReverse] = useToggle(true);
let [sortType, setSort] = useState('default')
let reverseFunction = (arr) => {
if(reverse){
return arr.reverse()
} else {
return arr
}
}
let sortRows = {
...
age: {
class: 'age',
fn: (a, b) => a-b
},
default: {
class: 'default',
fn: (a, b)=>a
}
}
return (
<table>
<thead>
<tr>
...
<td><Button onClick={()=>{setSort('age'); setReverse()}}>
...
</tr>
</thead>
<tbody>
{reverseFunction([...list].sort(sortRows[sortType].fn)).map(person=>{
return <tr>
...
<td>{person.age}</td>
...
</tr>
)}
)}
解决方案
就在我即将提交问题时注意到了错误。由于我仔细编辑了这个问题,我想我会提交以防万一它对任何忽略相同错误的人有用。
我正在对对象进行排序,而不是对对象属性进行排序。要按年龄正确排序,应比较参数的年龄属性。
age: {
class: 'age',
fn: (a, b) => a.age-b.age //Remember the property
},
推荐阅读
- typescript - 在 nextjs 中使用自定义 TypeScript 键入 .d.ts(未找到模块:无法解析 ...)
- c++ - 如何获取引用的基本类型?
- c# - 保持通话 3cx
- kdb - 在一天结束时复制错误
- c++ - 错误:可变大小的对象可能未初始化 编译时有时会出现此问题 如何解决?
- python-3.x - 与 pandas 数据框 groupby 相关的五个问题
- blazor - 在单独的页面/组件上编辑 DataGrid
- go - 使用 http.FileServer 按需生成文件
- c# - 尝试解压缩文件夹时访问被拒绝
- symfony - 无法将字符串分配给存储库中的属性 ID