Javascript 按属性对对象数组排序(使用自定义顺序,而不是按字母顺序)

Javascript 按属性对对象数组排序(使用自定义顺序,而不是按字母顺序),javascript,arrays,sorting,Javascript,Arrays,Sorting,我想请你帮我解决这个小问题 我想根据代码值对这个数组进行排序,但不是按字母顺序。 我用粗体表示了这一点,但最终还是被标记了,人们甚至不关心阅读这个问题 例如,我想要所有的绿色物体,然后是所有的蓝色物体,然后是所有的红色物体。最好的方法是什么 [ { code: "RED", value: 0}, { code: "BLUE", value: 0}, { code: "RED", value: 0}, { code: "GREEN", value: 0},

我想请你帮我解决这个小问题

我想根据代码值对这个数组进行排序,但不是按字母顺序。 我用粗体表示了这一点,但最终还是被标记了,人们甚至不关心阅读这个问题

例如,我想要所有的绿色物体,然后是所有的蓝色物体,然后是所有的红色物体。最好的方法是什么

[
    { code: "RED", value: 0},
    { code: "BLUE", value: 0},
    { code: "RED", value: 0},
    { code: "GREEN", value: 0},
    { code: "BLUE", value: 0},
    { code: "RED", value: 0},
    { code: "GREEN", value: 0},
    { code: "BLUE", value: 0}
]

使用sort函数是否可以做到这一点?在这种情况下,条件是什么?

您可以为想要的订单获取一个对象

var数组=[{code:RED,value:0},{code:BLUE,value:0},{code:RED,value:0},{code:GREEN,value:0},{code:BLUE,value:0},{code:RED,value:0},{code:GREEN,value:0},{code:BLUE,value:0}], 顺序={绿色:1,蓝色:2,红色:3}; array.sort函数a、b{ 退货订单[a.code]-订单[b.code]; }; console.logarray;
.作为控制台包装{max height:100%!important;top:0;}您可以实现一个架构数组,并根据该架构数组中元素的索引进行排序

常数a=[‘绿色’、‘蓝色’、‘红色’]; 常量o=[{code:RED,value:0},{code:BLUE,value:0},{code:RED,value:0},{code:GREEN,value:0},{code:BLUE,value:0},{code:RED,value:0},{code:GREEN,value:0},{code:BLUE,value:0}]; const r=o.slice.sort{code:q},{code:w}=>a.indexOfq-a.indexOfw;
console.logr 首先设置自定义优先级

var codePriority = [ "GREEN", "BLUE", "RED" ];
现在在排序中使用与

arr.sort( function(a,b){ 
   if ( a.code == b.code ) return a.value - b.value;
   return codePriority.indexOf( a.code ) - codePriority.indexOf( b.code ) ; notice this line
})
演示

var arr=[ {代码:红色,值:0}, {代码:蓝色,值:0}, {代码:红色,值:0}, {代码:绿色,值:0}, {代码:蓝色,值:0}, {代码:红色,值:0}, {代码:绿色,值:0}, {代码:蓝色,值:0} ]; var code优先级=[绿色、蓝色、红色]; arr.sort函数,b{ 如果a.code==b.code,则返回a.value-b.value; 返回codePriority.indexOf a.code-codePriority.indexOf b.code };
console.log arr 我正在处理一个案例,其中我必须匹配字符串状态,并按照各种状态进行排序。findIndex和.includes最终成为最佳方法

statusPriority设置预期的顺序。一旦找到索引,就可以对它们进行比较并返回到.sort

让记录=[ {状态:'记录已准备好提交',活动:true,名称:'A'}, {状态:'记录已发送',活动:true,名称:'B'}, {状态:'需要激活',活动:true,名称:'C'}, {状态:'记录提交失败',活动:true,名称:'D'}, {状态:'创建挂起',活动:true,名称:'E'}, ] console.logrecords.mapr=>r.status let statusPriority=[“创建”、“激活”、“已发送”、“准备就绪”、“失败”]; records.sorta,b=>{ 让aIndex=statusPriority.findIndexstatus=>a.status.toLowerCase.IncludeStatus; 让bIndex=statusPriority.findIndexstatus=>b.status.toLowerCase.includeStatus; 返回aIndex-bIndex; }
console.logrecords.mapr=>r。status@JasperSeinhorst我只是在数组中循环,我想看看是否有更快的方法。@lilezek请在标记之前阅读问题,我不希望它按字母顺序排列ORDERED@LucaDeNardi你只需要写你自己的排序函数就行了。@lilezek一点也不正确,因为有人提供了更快的方法。@LucaDeNardi这里的每个人都提供了排序功能。嗯,这很有趣!我没有想过使用对象来跟踪订单:您可以删除if检查。尝试返回codePriority.indexOf a.code-codePriority.indexOf b.code | | a.value-b。value@Rajesh哦,没想到:。。。我会保持现在的状态,它更具可读性。