如何使用javascript在前端根据项目中的其他字段对项目数组进行排序

如何使用javascript在前端根据项目中的其他字段对项目数组进行排序,javascript,reactjs,algorithm,sorting,filter,Javascript,Reactjs,Algorithm,Sorting,Filter,我试图用javascript在FE中为来自后端的项目创建两种排序类型,但我不知道它的逻辑应该是什么样子。我在哪里能读到这样的东西 第一种方法是按日期对它们进行排序(最近的第一种) 第二种方法是根据奖项总数对其进行排序(最高奖项数排在第一位) 我的数据是这样的: [ { awards: {awardOne: 1, awardTwo: 4, awardThree: 8} createdAt: "2020-11-13T21:12:50.742Z" text

我试图用javascript在FE中为来自后端的项目创建两种排序类型,但我不知道它的逻辑应该是什么样子。我在哪里能读到这样的东西

第一种方法是按日期对它们进行排序(最近的第一种) 第二种方法是根据奖项总数对其进行排序(最高奖项数排在第一位)

我的数据是这样的:

[
 {
    awards: {awardOne: 1, awardTwo: 4, awardThree: 8}
    createdAt: "2020-11-13T21:12:50.742Z"
    text: "Some text"
    username: "username"
 },
 {
    awards: {awardOne: 1, awardTwo: 4, awardThree: 8}
    createdAt: "2020-11-13T21:12:50.742Z"
    text: "Some text"
    username: "username"
 },
 {
    awards: {awardOne: 2, awardTwo: 3, awardThree: 2}
    createdAt: "2020-11-13T21:12:50.742Z"
    text: "Some text"
    username: "username"
 },
]

我想你可以按日期词汇对这些项目进行排序

使用你的代码会像

data.sort((a, b) => {
   return ('' + a.createdAt).localeCompare(b.createdAt);
}

要按奖励数量排序,您需要一个较小的函数,该函数计算奖励数量,然后编写如下内容:

 data.sort((a, b) => {
   return (calcNumOfAwards(a) - calcNumOfAwards(b))
}

以下是按每个对象中的奖励数量对数据进行排序的示例:。我正在将每个
奖励
对象中的项目缩减为一个值,并对它们进行比较

要按日期排序,可以像其他人指出的那样使用localeCompare,并使用类似的模式


更新:我刚刚在同一个沙盒中添加了一个按日期排序的工作示例

要实现这一点,您需要先按奖励排序数组,然后按日期排序。这样,日期将成为主要的排序标准。要做到这一点,你需要a)一种求和对象值的方法;查找
Object.values
Array.reduce
(将所有值相加)b)调用
Array.sort
两次重复:这是有意义的,但由于某些原因,如果我控制台记录sortedBywards和sortedByDate,我会在数组中获得相同的顺序。奇怪…啊,很好的捕捉,日期排序工作,但奖项排序被打破。我试图获取
awardsReducer
返回的值的长度,而reducer已经返回了一个数字。现在已经修好了,再次查看沙箱。我给每个项目都添加了新标签好的!现在它工作得很好!谢谢:)