Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按关键字和值对对象数组排序_Javascript_Reactjs_Typescript - Fatal编程技术网

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有时很疯狂。