gpt4 book ai didi

javascript - 按两个条件对数据进行排序?

转载 作者:行者123 更新时间:2023-11-30 07:52:24 24 4
gpt4 key购买 nike

我有一个 JSON 对象,我试图按时间和用户名的字母顺序对它进行排序:

示例数据:

   const obj = [ {"timestamp": 1487184625, "user": "Eric", "action": "navigate"},
{"timestamp": 1487184655, "user": "Bill", "action": "browse"},
{"timestamp": 1487184685, "user": "Eric", "action": "key press"},
{"timestamp": 1487184715, "user": "John", "action": "idle"},
{"timestamp": 1487184755, "user": "Tran", "action": "search"},
{"timestamp": 1487098049, "user": "Tran", "action": "click"},
{"timestamp": 1487098079, "user": "Eric", "action": "click"},
{"timestamp": 1487098109, "user": "Tran", "action": "click"},
{"timestamp": 1487098139, "user": "Bill", "action": "navigate"},
{"timestamp": 1487184625, "user": "Eric", "action": "navigate"},
{"timestamp": 1487184655, "user": "Bill", "action": "browse"},
{"timestamp": 1487184685, "user": "Eric", "action": "key press"},
{"timestamp": 1487184715, "user": "John", "action": "idle"},
{"timestamp": 1487184755, "user": "Tran", "action": "search"},
{"timestamp": 1487098049, "user": "Tran", "action": "click"},
{"timestamp": 1487098079, "user": "Eric", "action": "click"},
{"timestamp": 1487098109, "user": "Tran", "action": "click"},
{"timestamp": 1487098139, "user": "Bill", "action": "navigate"}]

我试过这样的:

console.log(obj.sort((a,b) => {
// if(a.user.localeCompare(b.user)){
// return 1
// }
// if(!a.user.localeCompare(b.user)){
// return -1
// }
if(a.timestamp > b.timestamp){
return -1
}
if(a.timestamp < b.timestamp){
return 1
}
}))

但我似乎无法让它工作。我也想避免使用 Lodash。有什么建议吗?

最佳答案

这可以通过单个排序函数行来解决:

 var results = obj.sort((a, b) => {
return a.user.localeCompare(b.user) || b.timestamp - a.timestamp
})

fiddle here

这是有效的,因为如果 localeCompare 为零,|| 将只考虑第二个组件。


我还想指出 || 不仅使语句检查简洁,还允许您在排序要求中链接进一步检查。例如,假设您还想按第三个选项(比如操作)排序。您可以通过简单地添加另一个 ||,并进一步检查。

关于javascript - 按两个条件对数据进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49742914/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com