JavaScript/React按变量JSON键排序

JavaScript/React按变量JSON键排序,javascript,reactjs,sorting,Javascript,Reactjs,Sorting,给定一个数组 const myArray = [ { name : "Tom", age : 28, eyes : "brown" }, { name : "Dave", age : 45, eyes : "green"

给定一个数组

const myArray = [
        {
            name : "Tom",
            age : 28,
            eyes : "brown"
        },
        {
            name : "Dave",
            age : 45,
            eyes : "green"
        },
        {
            name : "Harry",
            age : 22,
            eyes : "green"
        },
    ];
我知道用三元运算符对数组排序的简单方法

.sort((a, b) => a.age < b.age ? 1 : -1)
但我想让这个年龄成为一个可变的键,我可以用React-useState切换,这样它更像

.sort((a, b) => a.toggle < b.toggle ? 1 : -1);

const [toggle, setToggle] = useState('name');

但是很明显,将字符串“name”放在其中是行不通的,如果name没有引号,则返回变量不存在的结果。我一直在绞尽脑汁想如何让JavaScript使用JSON键、名称或年龄,而不是字符串或名为name/age的变量。非常感谢您在这方面的任何帮助

您可以为属性移交一个变量

const sortBy = k => (a, b) => a[k] > b[k] || -(a[k] < b[k]);

array.sort(sortBy('age'));
如果useState是一个函数,让我们说key是 函数定义

然后,在您的情况下,[key]将采用.name

如果您超过年龄,则在您的情况下,[key]将假定为a.age

根据您的示例,您可以执行以下操作:

const [toggle, setToggle] = useState('name');
const sortedList = myArray.sort((a, b) => a[toggle] < b[toggle] ? 1 : -1);
对变量对象键使用[]符号,并检查值的类型以确定要使用的排序比较

const [toggle, setToggle] = useState('name');

const sortedList = myArray.sort((a, b) => {
   const aVal = a[toggle],
         bVal = b[toggle];
    
    if(typeof aVal === 'number'){
       return aVal - bVal;
    }
    return aVal.localeCompare(bVal)
});

什么是切换?顺便说一句,只有用于排序的值会刺激算法。@AndrewLi我解释为OP想将键更改为sort。Not inital value是名称您需要像这样使用括号表示法:a[toggle]。此外,当值相同时,需要从compareFunction返回0。@charlietfl Ahhh,因此键本身正在更改。如果是这样的话,那么这可能是个骗局@安德烈:啊,是的,你是对的。现在的过程是什么?我是删除帖子还是保留它?我还想确保Nina和Dickens得到他们应得的分数UseState是一个ReactJS函数,对不起,我应该更清楚一点