Javascript 按关键字和值对对象数组排序
我有以下对象数组:Javascript 按关键字和值对对象数组排序,javascript,reactjs,typescript,Javascript,Reactjs,Typescript,我有以下对象数组: [ { "type": "Exam", "value": 27 }, { "type": "Lesson", "value": 17 }, { "type": "Lesson", "value": 4 }, { &q
[
{
"type": "Exam",
"value": 27
},
{
"type": "Lesson",
"value": 17
},
{
"type": "Lesson",
"value": 4
},
{
"type": "Exam",
"value": 67
}
]
我需要先显示减少的课程,然后显示减少的考试,所以最后我将有这样一个数组:
[
{
"type": "Lesson",
"value": 17
},
{
"type": "Lesson",
"value": 4
},
{
"type": "Exam",
"value": 67
},
{
"type": "Exam",
"value": 27
},
]
我通过使用函数
arr.sort((a,b)=>b.value-a.value))
减少值来实现排序,但我不知道如何使用关键字进行排序。我将React.js与TypeScript一起使用。您可以先检查类型,然后按值降序排序
const data=[{type:“考试”,值:27},{type:“课程”,值:17},{type:“课程”,值:4},{type:“考试”,值:67}];
data.sort((a,b)=>(b.type==='Lesson')-(a.type=='Lesson')| | b.value-a.value);
控制台日志(数据)代码>
.as console wrapper{max height:100%!important;top:0;}
我的建议是使用一个变量来存储类型的顺序,以便将来可以很容易地更改它(例如,如果您必须添加“考试前测试”或类似内容):
const输入=[
{
“类型”:“考试”,
“价值”:27
},
{
“类型”:“课程”,
“价值”:17
},
{
“类型”:“课程”,
“价值”:4
},
{
“类型”:“考试”,
“价值”:67
}
]
const typeOrder=[“课程”,“考试];
常量输出=输入。排序((a,b)=>{
如果(a.type===b.type)返回b.value-a.value;
返回typeOrder.indexOf(a.type)-typeOrder.indexOf(b.type);
});
控制台日志(输出)代码>您应该解释布尔运算在数学运算中被当作数字(false=0和真=1)。严重的是,在产品开发中,我会考虑<代码>(ByType===‘教训’)-(A.Type===‘教训’)
这几乎是一种令人愤怒的冒犯行为。你可以通过将typeOrder
作为一个对象,然后:input.sort((a,b)=>typeOrder[a.type]-typeOrder[b.type]| | b.value-a.value)来进一步简化这一点。
但一般来说,你的代码要比公认的、经过投票的答案好得多。StackOverflow有时很疯狂。