为了账号安全,请及时绑定邮箱和手机立即绑定

按属性对对象数组进行排序(具有自定义顺序,而不是字母顺序)

按属性对对象数组进行排序(具有自定义顺序,而不是字母顺序)

小唯快跑啊 2020-02-03 13:02:10
我想就这个小问题得到您的帮助。我想根据代码值而不是字母顺序对数组进行排序。 (我用粗体字指定了该名称,但最终还是被标记出来了,人们甚至都不在乎阅读该问题)例如,我想有所有绿色的对象,那么所有的蓝色的人,然后将所有的红色的。最好的方法是什么?[    { 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函数可以做到这一点吗?在这种情况下会是什么情况?
查看完整描述

3 回答

?
函数式编程

TA贡献1807条经验 获得超9个赞

首先设置自定义优先级


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 = [

    { 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}

];

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 )

});

console.log( arr );


查看完整回答
反对 回复 2020-02-03
?
波斯汪

TA贡献1811条经验 获得超4个赞

您可以实现一个模式数组,并根据该模式数组中元素的索引进行排序。


const a = ['GREEN', 'BLUE', 'RED'];


const 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.indexOf(q) - a.indexOf(w));


console.log(r);


查看完整回答
反对 回复 2020-02-03
  • 3 回答
  • 0 关注
  • 609 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信